在Python编程中,我们经常需要处理来自网络、文件或硬件设备的原始二进制数据。这时候,Python struct库就派上用场了!它提供了一种将Python值(如整数、浮点数、字符串等)与C语言风格的二进制数据结构之间相互转换的方法。

Python的struct模块是标准库的一部分,用于在Python值和C语言中的二进制表示之间进行转换。这种转换常用于:
struct模块主要有两个核心函数:
pack(fmt, v1, v2, ...):将Python值打包成二进制字节串unpack(fmt, buffer):从二进制字节串解包出Python值在使用struct时,你需要指定一个“格式字符串”(format string),它告诉模块如何解释数据。常用格式字符如下:
| 格式字符 | C类型 | Python类型 | 字节数 |
|---|---|---|---|
| c | char | bytes(长度为1) | 1 |
| b | signed char | int | 1 |
| B | unsigned char | int | 1 |
| h | short | int | 2 |
| H | unsigned short | int | 2 |
| i | int | int | 4 |
| I | unsigned int | int | 4 |
| f | float | float | 4 |
| d | double | float | 8 |
| s | char[] | bytes | 由前缀数字决定 |
import struct# 打包:将整数123和浮点数3.14打包成二进制数据packed_data = struct.pack('if', 123, 3.14)print("打包后的字节串:", packed_data)print("字节长度:", len(packed_data))# 解包:从二进制数据中还原出原始值unpacked_data = struct.unpack('if', packed_data)print("解包后的元组:", unpacked_data)输出结果:
打包后的字节串: b'{\x00\x00\x00\xcd\xccL@'字节长度: 8解包后的元组: (123, 3.140000104904175)注意:字符串在struct中必须是字节类型(bytes),且需指定长度。
import struct# 打包一个5字节的字符串和一个整数name = b"Alice"age = 25packed = struct.pack('5si', name, age)# 解包unpacked_name, unpacked_age = struct.unpack('5si', packed)print("姓名:", unpacked_name.decode('utf-8')) # 转回字符串print("年龄:", unpacked_age)不同系统可能使用不同的字节序(大端或小端)。struct默认使用本机字节序,但你可以通过格式字符串前缀显式指定:
<:小端(Little-endian)>:大端(Big-endian)!:网络字节序(即大端)import struct# 小端打包data_le = struct.pack('<H', 0x1234)print("小端:", data_le) # 输出: b'4\x12'# 大端打包data_be = struct.pack('>H', 0x1234)print("大端:", data_be) # 输出: b'\x124'假设你要读取一个自定义的二进制文件头,包含以下字段:
import struct# 模拟读取二进制数据header_format = '<4sBI' # 小端,4字节字符串 + 1字节无符号 + 4字节无符号mock_data = struct.pack(header_format, b'DATA', 1, 1024)# 解析头部magic, version, length = struct.unpack(header_format, mock_data)print(f"魔数: {magic.decode()}")print(f"版本: {version}")print(f"数据长度: {length} 字节")通过本教程,你已经掌握了Python struct库的基本用法,包括格式字符、打包/解包操作、字节序控制以及实际应用。无论你是处理网络协议、解析二进制文件,还是与硬件通信,struct模块教程都能为你提供强大支持。
记住关键点:
现在,你可以自信地使用Python字节操作来处理各种二进制数据了!如果你正在学习二进制数据处理,struct模块绝对是你的得力助手。
本文由主机测评网于2025-12-06发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025123773.html