ホームページ  >  記事  >  バックエンド開発  >  PHPでバイナリデータをバイト配列に変換する方法

PHPでバイナリデータをバイト配列に変換する方法

PHPz
PHPzオリジナル
2023-04-18 14:10:27731ブラウズ

開発では、データをバイナリ形式で送信する必要がよくありますが、このとき、送信プロセス中にデータをより安定して効率的に送信できるように、バイナリデータをバイト配列に変換する必要があります。 PHPではこの機能を実現するのがpack関数とunpack関数ですので、一緒に学びましょう。

  1. 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。実行結果は次のようになります。

Cwiki

つまり、文字配列 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。