php pack 实现
PHP pack 函数概述
pack 函数用于将数据按照指定格式打包成二进制字符串,常用于处理二进制数据、网络协议或文件格式。其语法为:
string pack ( string $format , mixed $args1 [, mixed $... ] )
$format 参数指定打包格式,后续参数为待打包的值。
常用格式字符
| 格式符 | 含义 | 示例值类型 |
|---|---|---|
a |
NUL 填充的字符串 | "abc" |
A |
空格填充的字符串 | "abc" |
h |
16进制字符串(低位在前) | "1a2b" |
H |
16进制字符串(高位在前) | "1a2b" |
c |
有符号字符 | 65 |
C |
无符号字符 | 65 |
s |
有符号短整型(16位) | 1234 |
S |
无符号短整型(16位) | 1234 |
n |
无符号短整型(大端序) | 1234 |
v |
无符号短整型(小端序) | 1234 |
i |
有符号整型(依赖平台) | 123456 |
I |
无符号整型(依赖平台) | 123456 |
f |
单精度浮点数 | 3.14 |
d |
双精度浮点数 | 3.14 |
使用示例
打包字符串和整型
$binary = pack('A5a5n', 'Hello', 'World', 1234);
// 输出:Hello\x00\x00\x00World\x00\x00\x00\x04\xD2
A5:将 "Hello" 填充为5字节(空格填充)。a5:将 "World" 填充为5字节(NUL 填充)。n:将 1234 打包为大端序16位整型。
打包16进制数据
$hex = pack('H*', '4a6f7921');
// 输出:Joy!(16进制字符串转ASCII)
打包浮点数
$float = pack('f', 3.14);
// 输出:二进制形式的单精度浮点数
注意事项
- 格式字符区分大小写(如
n和N不同)。 - 参数数量需与格式符匹配,否则报错。
- 大端序(
n)和小端序(v)在网络传输中需明确指定。 - 使用
unpack函数可解包二进制数据。
解包示例
$data = unpack('A5first/a5second/nnumber', $binary);
print_r($data);
// 输出:Array ( [first] => Hello [second] => World [number] => 1234 )
通过合理组合格式字符,pack 可灵活处理各类二进制数据场景。







