在 PHP 中,pack 和 unpack 函数用于数据的打包和解包,通常用于处理二进制数据。pack 将数据打包成二进制格式,而 unpack 则将二进制数据解包成 PHP 变量。
1. pack 函数
1.1 函数原型
string pack(string $format, mixed ...$values)$format:一个格式字符串,定义了要打包的数据类型。$values:要打包的一个或多个值。
1.2 常用格式字符
| 格式字符 | 说明 |
|---|---|
A | 字符串(填充空格) |
a | 字符串(不填充) |
C | 无符号字符 |
c | 有符号字符 |
S | 无符号短整型 |
s | 有符号短整型 |
I | 无符号整型 |
i | 有符号整型 |
f | 单精度浮点数 |
d | 双精度浮点数 |
2. unpack 函数
2.1 函数原型
array unpack(string $format, string $data)$format:格式字符串,定义了要解包的数据类型。$data:要解包的二进制数据。
3. 示例代码
3.1 使用 pack 打包数据
以下示例展示如何使用 pack 将多个数据项打包成二进制格式:
<?php
// 打包一个字符串、一个字符和一个整数
$packedData = pack('A10C3I', 'Hello', 'A', 12345);
// 打印打包后的二进制数据
echo "Packed Data: " . bin2hex($packedData) . "\n"; // 用 hex 表示
?>3.2 使用 unpack 解包数据
接下来,使用 unpack 将上一步打包的数据解包:
<?php
// 解包数据
$unpackedData = unpack('A10string/C1char/Iint', $packedData);
// 打印解包后的数据
echo "Unpacked Data:\n";
echo "String: " . $unpackedData['string'] . "\n";
echo "Char: " . $unpackedData['char'] . "\n";
echo "Int: " . $unpackedData['int'] . "\n";
?>3.3 完整示例
将打包和解包结合在一起:
<?php
// 打包数据
$packedData = pack('A10C3I', 'Hello', 'A', 12345);
echo "Packed Data: " . bin2hex($packedData) . "\n";
// 解包数据
$unpackedData = unpack('A10string/C1char/Iint', $packedData);
echo "Unpacked Data:\n";
echo "String: " . $unpackedData['string'] . "\n";
echo "Char: " . $unpackedData['char'] . "\n";
echo "Int: " . $unpackedData['int'] . "\n";
?>4. 运行结果
运行上述完整示例,您将看到类似于以下的输出:
Packed Data: 48656c6c6f4100000000000000000000000000000000003039
Unpacked Data:
String: Hello
Char: 65
Int: 12345