ホームページ > バックエンド開発 > PHPチュートリアル > バイナリ ストリーム インターフェイスの解析アプリケーション例 Pack、unpack、ord 関数の使用法_PHP チュートリアル

バイナリ ストリーム インターフェイスの解析アプリケーション例 Pack、unpack、ord 関数の使用法_PHP チュートリアル

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-07-21 15:05:21
オリジナル
1450 人が閲覧しました

仕事では、バイナリバイト処理におけるパック、アンパック、オードの威力についても徐々に学びました。 以下に一つずつ紹介していきます。私たちの仕事では、おそらくあまり使用されません。 私の最近の仕事では、通信にバイナリ ストリームを使用する必要があり、インターフェイスは PHP を使用して受信されました。処理するときに、たくさんの情報を調べました。なぜなら、それらは実際にめったに使用されず、仕事でそれらを使用する友人もほとんどいないからです。 また、職場では、pack、unpack、ord がバイナリ バイト処理にいかに強力であるかを徐々に学びました。 以下に一つずつ紹介していきます。
pack 関数の説明: この関数は、データを圧縮して文字列にパックするために使用されます。
構文: pack(format,args+)
パラメータの説明
formatが必要です。データをパッケージ化するときに使用する形式を指定します。
args+ オプション。ラップする 1 つ以上のパラメータを指定します。
文字の説明
a 空白文字列をNULL文字で埋めます
A 空白文字列をSPACE文字(スペース)で埋めます
h 16進数文字列、下位桁が最初
H 16進数文字列、上位桁が最初
c 符号付き文字
C 符号なし文字
s 符号付き short integer (16 桁、コンピューターのビット順序に従って)
S unsigned short integer (16 桁、コンピューターのビット順序に従って)
n unsigned short integer (16 桁、ビッグバイトの順序に従って)
v 符号なし短整数 (16 桁、下位バイト順)
i 符号付き整数 (コンピューターの順序と範囲に従う)
I 符号なし整数 (コンピューターの順序と範囲に従う)
l 符号付き長整数 (32 桁、コンピューターのビット順序に従って)
L 符号なし長整数 (32 桁、コンピューターのビット順序に従って)
N 符号なし短整数 (32 桁、コンピューターのビット順序に従って)、ビッグエンディアン順序)
V unsigned short integer (32 桁、ローエンディアン順)
f 単精度浮動小数点数 (コンピュータの範囲に応じて)
d 倍の正確な浮動小数点数 (コンピュータの範囲に応じて)
x 空ビット
X 1ビット巻き戻す
@ NULL文字を絶対位置に埋め込む
unpack関数の説明: この関数はビット列データを解凍するために使用されます
構文: unpack(format,args+)
パラメータの説明
形式が必要です。データをパッケージ化するときに使用する形式を指定します。
args+ オプション。ラップする 1 つ以上のパラメータを指定します。
パラメータはパックと同じです。
ord 関数の説明: 対応する文字の acill コード値を返す
構文: ord($character);
説明例:

コードをコピー コードは次のとおりです:

//文字
$str=(pack("A*", "中国"));
echo $str,"=",strlen($str),"byte n"; $str);
//H 文字
$str=(pack("H*", "fffe"));
echo $str,"=",strlen($str),"byte n"; $str) ;
//C 文字
$str=(pack("C*", "55","56","57"));
echo $str,"=",strlen($str), "byte n";
getAscill($str);
//i 文字の短整数 32 ビット、4 バイト、64 ビット、8 バイト
$str=("i", "100")); str ,"=",strlen($str),"byte n";
getAscill($str);
//s 文字 short integer 2 バイト
$str=(pack("s", "100") );
echo $str,"=",strlen($str),"byte n";
getAscill($str);
//l 文字長整数 4 バイト
$str=(pack("l ", "100" ));
echo $str,"=",strlen($str),"byte n";
getAscill($str);
//f 文字単精度浮動小数点 4 バイト
$str=("f ", "100"));
echo $str,"=",strlen($str),"byte n";
getAscill($str);
//d 文字 double 精度浮動小数点 8 バイト
$str= (pack("d", "100"));
echo $str,"=",strlen($str),"byte n";
関数 getAscill($str)
$arr=str_split($str);
foreach ($arr as $v)
{
echo $v,"=",ord($v),"n"
}
echo "====== =======rnrn";
}
?>


上記の例を通して、異なる形式で保存された同じ文字列が異なるバイト数を占めることがわかります。 ここでは、文字をさまざまな形式で保存するとストレージ容量を節約できることもわかります。そして暗号化効果は判読できません。 突然、フィールドが 10 ビット長の整数のみの場合に、データベースのフィールド タイプを設計するという問題が頭に浮かびました。これを整数: 256*256*256*256 に設定します。これは、10 個の長さの文字列に設定されている場合は 4 バイトになります。これには 10 バイトが必要です。消化スペース全体が2倍になります。 正しい文字タイプを設定すると、データベースのパフォーマンスを向上させるのに非常に役立ちます。あはは、話が少し逸れてしまいました...
PHPのバイトコード通信処理例の分析
先ほど述べたpackの機能:容量の節約、形式の暗号化
以下はこれら2つの例です。インターフェース開発要件:
パラメータの説明
ユーザー名は20バイト、文字型
パスワードは10バイト、文字型
年齢は1バイト、unsigned char型
生年月日は4バイト、整数型(19800101)
メールアドレスは50 バイト、文字列
各フィールド間で使用: "

http://www.bkjia.com/PHPjc/327691.html
www.bkjia.comtru​​e
http://www.bkjia.com/PHPjc/327691.html

技術記事

仕事では、バイナリ バイト処理におけるパック、アンパック、オードの威力についても徐々に学びました。 以下に一つずつ紹介していきます。私たちの仕事では、おそらくあまり使用されません。 私は最近...





ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
変数を解析する
から 1970-01-01 08:00:00
0
0
0
一重引用符は \' と \ を解析できます
から 1970-01-01 08:00:00
0
0
0
PHP は json を解析します
から 1970-01-01 08:00:00
0
0
0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート