現在の位置: ホーム> 最新記事一覧> Pack()とunpack()のフォーマットコードリストと対応

Pack()とunpack()のフォーマットコードリストと対応

M66 2025-05-26

PHPでは、 Pack()およびUnpack()関数はバイナリデータの処理によく使用され、特にネットワーク通信、ファイルの読み取りと書き込み、データエンコーディングなどのシナリオでの使用に適しています。バイトの正確な制御が必要です。この記事では、これら2つの機能の使用について詳細に説明し、バイナリデータをより効率的に処理できるように、完全なフォーマットコード比較テーブルを添付します。

1。pack ()unpack()とは何ですか?

  • pack() :データをバイナリ文字列にパッケージ化します。

  • unpack() :バイナリ文字列をPHPアレイに解凍します。

どちらもフォーマットコードを使用してデータの構造を定義し、データのエンコード/デコードの方法を決定します。

2。pack ()関数の使用

$data = pack("C*", 72, 101, 108, 108, 111); // 意思 ASCII コードを文字列に変換します "Hello"
echo $data; // 出力: Hello

文法:

 string pack(string $format, mixed $values...)

3。unpack ()関数の使用

$data = "Hello";
$result = unpack("C*", $data);
print_r($result);

出力:

 Array
(
    [1] => 72
    [2] => 101
    [3] => 108
    [4] => 108
    [5] => 111
)

文法:

 array unpack(string $format, string $data, int $offset = 0)

4.一般的なフォーマットコード比較テーブル

フォーマットコード説明しますバイトの長さ大小の端
a nulは文字列を埋めます(nulを削除しません)長さを指定しますなし
aスペースが弦を埋める(テールスペースが取り外されます)長さを指定しますなし
hヘキサデシマル文字列、各文字は4ビットを表します2桁ごとに= 1バイトなし
h CAPS 16分体で、各文字は4ビットを示します2桁ごとに= 1バイトなし
c署名された文字(8ビット) 1バイトなし
c署名されていない文字(8ビット) 1バイトなし
s署名された短い整数(16ビット) 2バイトホストバイトオーダー
s符号なしショート整数(16ビット) 2バイトホストバイトオーダー
n署名されていない短い整数(16ビット)、ネットワークバイト順序2バイトビッグエンディアン
v符号なしの短い整数(16ビット)、リトルエンディアンバイト順序2バイトリトルエンディアン
署名された整数(機械関連) 4バイトまたは8バイトホストバイトオーダー
署名されていない整数(機械関連) 4バイトまたは8バイトホストバイトオーダー
l署名された長い整数(32ビット) 4バイトホストバイトオーダー
l署名の長い(32ビット) 4バイトホストバイトオーダー
n署名されていない長い整数(32ビット)、ネットワークバイト順序4バイトビッグエンディアン
v署名されていない長い整数(32ビット)、リトルエンディアンバイトの順序4バイトリトルエンディアン
fシングルエシジョンフローティングポイント番号(32ビット) 4バイトホストバイトオーダー
d二重精度の浮動小数点数(64ビット) 8バイトホストバイトオーダー
xバイトを入力します(1バイトをスキップ) 1バイトなし
x 1バイトを巻き戻します1バイトなし
@絶対的な位置を設定します(スキップ/フォールバックポジションに戻ります)変数なし

5。実用的なアプリケーションの例

ネットワーク通信:IPアドレス変換

$ip = "192.168.1.1";
$packed = pack("C4", ...explode('.', $ip));
echo bin2hex($packed); // 出力 c0a80101

$unpacked = unpack("C4", $packed);
echo implode('.', $unpacked); // 出力 192.168.1.1

バイナリプロトコル解析(ファイルヘッダーの読み取りなど)

 $binary = file_get_contents("https://m66.net/example/file.bin");
$header = unpack("a4signature/Nsize", $binary);
print_r($header);

6。フォーマットコードの数量モディファイア

たとえば、フォーマットコードは数量で変更できます。

  • C4 :4つの署名されていない文字を表します

  • A10 :10文字を表すスペースを持つパッド付き文字列

  • @8 :8番目のバイト位置にジャンプします

*を使用して、できるだけ読み取ることもできます。

 $data = unpack("C*", "Hello"); // すべてのバイトを読んでください

7。概要

PHPのPack()およびUnpack()は、強力なバイナリ処理ツールです。そのフォーマットコードと使用に精通していると、基礎となるデータをより柔軟に処理することができます。プロトコルの解析、構造化データの保存、または効率的なネットワーク通信プロトコルの構築など、これら2つの機能は非常に実用的なツールです。

多くの形式コードがありますが、一般的に使用されるタイプ( CNNFDなど)を習得すると、ほとんどのニーズを満たすことができます。開発で一緒にbin2hex()hex2bin()を使用することをお勧めします。デバッグはより便利です。