1.文档阅读 PHP: pack - Manual PHP: unpack - Manual PHP中的pack和unpack函数 - 掘金 php pack()函数详解与示例-php教程-PHP中文网 php - PHP中pack、unpack的详细用法_个人文章 - SegmentFault 思否 -- TBD PHP Pack/Unpack implementation in Javascript Mismatch - Stack Overflow -- 推荐弄清楚 二进制字符串_百度百科 文件系统 - 文件类型 - 二进制/文本类型_穿素白衫的中少年的博客-CSDN博客_二进制文件 讲解二进制 关于二进制,没有比这个讲的更清楚的了_哔哩哔哩_bilibili 6. 二进制与字符串 - 理论+上机 - 敏编程入门3步曲之Python教程_哔哩哔哩_bilibili 2.整理输出 PHP 中的 pack 和 unpack 函数 pack 和 unpack 是 PHP 中用于处理二进制数据的函数,常用于将数据转换为二进制字符串或从二进制字符串中解析数据。 这些函数在文件处理、网络通信或数据序列化等场景中非常有用。 pack 函数 pack 函数将数据按照指定格式打包成二进制字符串。其基本语法如下: string pack ( string $format , mixed $args [, mixed $... ] )
格式字符串(format)由一系列格式字符组成,每个字符对应一个参数。常见的格式字符包括: a :NUL 填充的字符串A :空格填充的字符串h :十六进制字符串,低位在前H :十六进制字符串,高位在前c :有符号字符C :无符号字符s :有符号短整型(16位,机器字节序)S :无符号短整型(16位,机器字节序)n :无符号短整型(16位,大端字节序)v :无符号短整型(16位,小端字节序)i :有符号整型(机器相关大小和字节序)I :无符号整型(机器相关大小和字节序)l :有符号长整型(32位,机器字节序)L :无符号长整型(32位,机器字节序)N :无符号长整型(32位,大端字节序)V :无符号长整型(32位,小端字节序)f :浮点数(机器相关大小和表示)d :双精度浮点数(机器相关大小和表示)x :NUL 字节X :回退一个字节@ :用 NUL 填充到绝对位置 示例: $binary = pack('a5A5', 'hello', 'world');
echo $binary; // 输出:helloworld
unpack 函数 unpack 函数从二进制字符串中解析数据。其基本语法如下: array unpack ( string $format , string $data [, int $offset = 0 ] )
格式字符串的语法与 pack 类似,但可以包含重复计数和键名。解析后的数据以关联数组形式返回。 示例: $binary = pack('a5A5', 'hello', 'world');
$data = unpack('a5first/A5second', $binary);
print_r($data);
// 输出:
// Array
// (
// [first] => hello
// [second] => world
// )
使用场景 pack 和 unpack 函数常用于以下场景: - 处理二进制文件格式(如图像、音频文件)
- 网络协议数据包的构造和解析
- 数据序列化和反序列化
- 跨平台数据交换(确保字节序一致)
注意事项 - 字节序问题:不同平台可能使用不同的字节序(大端或小端),跨平台数据交换时需明确指定。
- 数据对齐:某些平台要求数据按特定边界对齐,需使用填充字符处理。
- 安全性:处理二进制数据时需注意缓冲区溢出等安全问题。
通过合理使用 pack 和 unpack 函数,可以高效地处理二进制数据,满足各种复杂场景的需求。  后续补充 ... |