读取二进制数据时struct格式报错,如何指定小端字节序?
解决struct.unpack的字节序格式错误问题
二进制数据规格
- 1 Byte SF-Major
- 1 Byte SF-Minor
- 1 Byte SF-Patch
- 1 Byte SF-Build
- 2 Byte build(小端字节序)
错误代码及报错信息
用户编写的读取代码:
format_string = ( 'BBBB' '<H' ) parsed_data: bytes = binary_data[:10] unpacked_data = struct.unpack(format_string, header_data)
执行时触发错误:
unpacked_data = struct.unpack(format_string, header_data) struct.error: bad char in struct format
问题原因
Python的struct模块有明确规则:字节序(</>/=等)、对齐方式这类修饰符必须放在格式字符串的最开头,不能插在格式符中间。你把<放在BBBB之后,struct会把它当成无效的格式字符,因此报错。
解决方案
把小端字节序标记<移到格式字符串最前端,按顺序写所有格式符即可,同时注意修正字节截取长度(你的数据总长度是4*1+2=6字节,原代码取前10字节属于多余):
import struct # 小端字节序开头,后跟4个单字节、1个双字节无符号整数 format_string = '<BBBBH' # 截取对应长度的二进制数据(6字节) parsed_data = binary_data[:6] unpacked_data = struct.unpack(format_string, parsed_data)
这样既满足了build字段的小端字节序要求,又能正确解析所有字段。
内容的提问来源于stack exchange,提问作者Em Ae
相关产品推荐
相关产品推荐

