struct模块
在python中, 提供了 struct
模块来与二进制数据进行交互以及操作
使用时需要导入模块后使用:
import struct
这里介绍几个常用方法, 后面会用到:
struct.pack(format, data)
struct.pack()
方法能够将 data
以 format
的格式打包成二进制数据
其中 format
的可选项有:
字符 | 字节顺序 | 大小 | 对齐方式 |
---|---|---|---|
| 按原字节 | 按原字节 | 按原字节 |
| 按原字节 | 标准 | 无 |
| 小端 | 标准 | 无 |
| 大端 | 标准 | 无 |
| 网络(=大端) | 标准 | 无 |
data = 123456
packed_data = struct.pack(">I", data)
print(packed_data)
# 结果是 b'\x00\x01\xe2@'
这里尝试将 123456
以整数形式打包为大端序四字节二进制数据, 结果应该是 b'\x00\x01\xe2\x40'
, 这里print自动把 \x40
解码成 @
了,不用管
struct.unpack(format, data)
struct.unpack()
方法能将二进制数据解包成对应的数据, 参数的用法与 pack
一致,
其返回值是一个元组
(因为unpack的设计初衷是解包多个数据, 哪怕只解包一个数据 )
比如我们需要将上面打包的二进制数据进行解包, 得到原来的 123456
data = b'\x00\x01\xe2@'
data_unpacked = struct.unpack(">I", data)
print(data_unpacked)
# 结果是 (123456,)
print(data_unpacked[0])
# 结果是 123456
22 十月 2024