php pack 实现
PHP pack 函数实现
pack 函数用于将数据按照指定格式打包成二进制字符串。该函数在二进制数据处理、网络通信或文件操作中非常有用。
基本语法
string pack ( string $format , mixed $args [, mixed $... ] )
$format:指定打包格式的字符串。$args:要打包的数据,数量需与格式符匹配。
常用格式符
| 格式符 | 说明 |
|---|---|
a |
NUL 填充的字符串 |
A |
空格填充的字符串 |
h |
十六进制字符串(低位在前) |
H |
十六进制字符串(高位在前) |
c |
有符号字符 |
C |
无符号字符 |
s |
有符号短整型(16位) |
S |
无符号短整型(16位) |
n |
无符号短整型(大端序) |
v |
无符号短整型(小端序) |
i |
有符号整型(依赖平台) |
I |
无符号整型(依赖平台) |
l |
有符号长整型(32位) |
L |
无符号长整型(32位) |
N |
无符号长整型(大端序) |
V |
无符号长整型(小端序) |
f |
单精度浮点数 |
d |
双精度浮点数 |
x |
NUL 字节 |
X |
回退一字节 |
@ |
用 NUL 填充到绝对位置 |
使用示例
打包字符串

$packed = pack('A5', 'hello'); // 输出 "hello"(空格填充至5字节)
打包整型

$packed = pack('n', 1234); // 大端序的16位无符号整型
打包浮点数
$packed = pack('f', 3.14); // 单精度浮点数
复杂格式
$packed = pack('C3a8', 65, 66, 67, 'test'); // 打包3个无符号字符和1个NUL填充字符串
注意事项
- 格式符区分大小写。
- 数据长度需与格式符匹配,否则可能截断或填充。
- 大端序(
n,N)和小端序(v,V)在网络传输中需特别注意。 - 解包时使用
unpack函数,需与pack的格式一致。
实际应用场景
- 网络协议数据打包。
- 二进制文件读写。
- 加密算法数据转换。
通过灵活组合格式符,可以实现复杂的二进制数据打包需求。






