unpack 解压缩二进制数据
封面图
•
2025-12-15
•
PHP
205
0
0
0
在 Python 中,`unpack` 通常指的是使用 `struct` 模块来解码二进制数据。这个模块允许你将二进制数据(例如来自网络、文件或设备的数据)转换为 Python 的基本类型(如整数、浮点数等)。它与 `pack` 相对,`pack` 是将数据编码为二进制。 --- ## ✅ 基本用法:`struct.unpack` ### 语法: ```python struct.unpack(fmt, buffer) ``` - `fmt`:格式字符串,指定如何解释二进制数据。 - `buffer`:一个字节对象(bytes)或可变字节对象(bytearray)。 --- ## 🧩 格式字符串(fmt)说明 | 字符 | 类型 | 大小(字节) | 说明 | |------|----------------|---------------|------------------------| | `>` | 网络字节序(大端) | - | | | `<` | 小端序 | - | | | `=` | 本机字节序 | - | | | `i` | int | 4 | 有符号整数 | | `I` | unsigned int | 4 | 无符号整数 | | `f` | float | 4 | 单精度浮点数 | | `d` | double | 8 | 双精度浮点数 | | `s` | string | n | n 个字节的字符串 | > 注意:`<` 和 `>` 必须放在格式字符串的最前面。 --- ## 🔁 示例:解压缩二进制数据 ### 示例 1:解压一个整数和一个浮点数 ```python import struct # 二进制数据(假设是 4 字节整数 + 4 字节浮点数) binary_data = b'\x01\x00\x00\x00\x00\x00\x80\x3f' # 使用 unpack 解析 result = struct.unpack('<if', binary_data) # '<' 表示小端,'i' 是 int,'f' 是 float print(result) # 输出: (1, 1.0) ``` --- ### 示例 2:解压多个整数 ```python import struct binary_data = b'\x01\x00\x00\x00\x02\x00\x00\x00' result = struct.unpack('<ii', binary_data) print(result) # 输出: (1, 2) ``` --- ### 示例 3:解压字符串 ```python import struct binary_data = b'Hello\x00\x00\x00\x00' # 8 字节字符串 result = struct.unpack('<8s', binary_data) print(result) # 输出: (b'Hello\x00\x00\x00\x00',) ``` --- ## ⚠️ 注意事项 - 二进制数据长度必须与格式字符串匹配,否则会抛出 `struct.error`。 - 如果你需要从文件中读取二进制数据,可以使用 `file.read(n)` 来获取固定长度的字节。 - 对于复杂结构(如结构体),可以使用 `struct.calcsize(fmt)` 预先计算所需字节数。 --- ## ✅ 总结 | 功能 | 方法 | 说明 | |-------------|-------------------|--------------------------| | 解压缩数据 | `struct.unpack()` | 将二进制数据转为 Python 类型 | | 格式控制 | `fmt` 字符串 | 控制数据的大小和类型 | 如果你有具体的二进制数据或格式需求,欢迎提供更多信息,我可以帮你写对应的 `unpack` 代码。
上一篇:
php 位运算符
下一篇:
set_error_handler 设置一个用户定义的错误处理函数
标题录入,一次不能超过6条
留言
评论