pack(string $format, mixed ...$values): string
依 $format 指定格式,將多個引數打包成二進位字串。格式字元與 Perl pack 相容。
| 字元 | 說明 | 備註 |
|---|---|---|
C | 無號字元 (unsigned char, 1 byte) | 0-255 |
n | 無號短整數 (大端序, 2 bytes) | 網路位元組序 |
N | 無號長整數 (大端序, 4 bytes) | 網路位元組序 |
v | 無號短整數 (小端序, 2 bytes) | |
V | 無號長整數 (小端序, 4 bytes) | |
a | 以 NUL 填充的字串 | |
H | 十六進位字串 (高半位元組優先) |
<?php
// 將三個 ASCII 碼打包成字串 "PHP"
$binary = pack('C3', 80, 72, 80);
echo $binary; // 輸出: PHP
echo bin2hex($binary); // 輸出: 504850
?>
<?php
// 假設協定:版本(1 byte) + 指令(1 byte) + 長度(2 bytes, 大端序) + 資料
$version = 1;
$command = 0x05;
$data = 'Hello';
$length = strlen($data);
$packet = pack('CCn', $version, $command, $length) . $data;
// 送出 $packet 到 socket...
?>
<?php
$binary = pack('C3', 80, 72, 80);
$arr = unpack('C3chars', $binary);
print_r($arr);
// Array ( [chars1] => 80 [chars2] => 72 [chars3] => 80 )
?>
pack 結果。'C3' 等同 'CCC';'*' 表示用盡所有引數。