開発では、データをバイナリ形式で送信する必要がよくありますが、このとき、送信プロセス中にデータをより安定して効率的に送信できるように、バイナリデータをバイト配列に変換する必要があります。 PHPではこの機能を実現するのがpack関数とunpack関数ですので、一緒に学びましょう。
- pack 関数
pack 関数は、PHP のバイナリ データ パッケージ化関数で、指定された形式に従って、指定されたデータをバイナリ文字列にパックできます。このうち、フォーマット文字列パラメータはパックするバイト順に従って指定され、各フォーマット文字はデータ型に対応します。 Pack 関数の基本的な使用法は次のとおりです。
string pack ( string $format [, mixed $args [, mixed $... ]] )
ログイン後にコピー
このうち、$format パラメータはフォーマット文字列、$args はパックする必要があるデータです。
次は、pack 関数の使用法を示す例です:
$binary_str = pack("C*", 67, 119, 105, 107, 105);
echo $binary_str;
ログイン後にコピー
この例では、書式文字列 "C*" は文字によるパッケージ化を意味し、args パラメーターは 67 です。 119、105、107、105。実行結果は次のようになります。
つまり、文字配列 67、119、105、107、105 で構成される文字列が文字モードでパックされ、文字列 "Cwiki" が返されます。
pack 関数は、文字モードに加えて、整数 (I)、長整数 (L)、倍精度 (d) など、他のさまざまなパッキング モードもサポートしています。一般的に使用されるフォーマット文字の一部を次に示します。
- a: NULL で終了する文字列
- A: スペースで満たされた文字列
- c: 署名付き文字
- C: unsigned char
- s: signed short (常に 16 ビット、マシン バイト オーダー)
- S: unsigned short (常に 16 ビット、マシン バイト オーダー)
- n: unsigned short (常に 16 ビット、ビッグ エンディアンのバイト オーダー)
- v: unsigned short (常に 16 ビット、リトル エンディアンのバイト オーダー)
- i: 符号付き整数 (マシンに依存するサイズとバイト)順序)
#I: 符号なし整数 (マシンに依存するサイズとバイト順序)- l: 符号付き長整数 (常に 32 ビット、マシンのバイト順序)
- L: 符号なし長整数 (常に 32 ビット、マシン バイト オーダー)
- N: 符号なしロング (常に 32 ビット、ビッグ エンディアン バイト オーダー)
- V: 符号なしロング (常に 32 ビット、リトル エンディアン バイト オーダー)
- f: float (マシンに依存するサイズと表現)
- d: double (マシンに依存するサイズと表現)
-
unpack 関数-
unpack 関数は、PHP のバイナリ データ展開関数であり、バイナリ データ文字列を指定されたデータ型に展開できます。 Pack 関数と同様に、書式文字列パラメーターとデータ文字列を指定することで、バイナリ データをさまざまなデータ型を表す変数に解凍できます。アンパック関数の基本的な使用法は次のとおりです。
array unpack ( string $format , string $data )
ログイン後にコピー
このうち、$format パラメータはフォーマット文字列、$data はアンパックする必要があるデータです。
次は、unpack 関数の使用法を示す例です:
$binary_str = "Cwiki";
$unpacked = unpack("C*",$binary_str);
print_r($unpacked);
ログイン後にコピー
この例では、$binary_str はバイナリ データ文字列 "Cwiki"、$format パラメータは "C *」は、キャラクターモードの解凍を押すことを意味します。実行結果は次のようになります。
Array
(
[1] => 67
[2] => 119
[3] => 105
[4] => 107
[5] => 105
)
ログイン後にコピー
つまり、バイナリ データ文字列「Cwiki」が文字モードで解凍され、さまざまな文字を表す配列が取得されます。
unpack 関数は、character メソッド以外にもさまざまな unpack メソッドをサポートしており、フォーマット文字と Pack 関数のフォーマット文字は 1 対 1 で対応します。
まとめると、pack 関数と unpack 関数を組み合わせて使用することで、あらゆるデータをバイナリ文字列に変換し、バイナリ文字列からさまざまなデータ型をアンパックすることで、PHP のバイナリ関数を実現できます。バイト配列。
以上がPHPでバイナリデータをバイト配列に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。