在 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