我有以下规格的二进制数据
1 Byte SF-Major
1 Byte SF-Minor
1 Byte SF-Patch
1 Byte SF-Build
2 Byte build (little endian)
我编写了以下代码来读取这些数据
format_string = (
'BBBB'
'<H'
)
parsed_data: bytes = binary_data[:10]
unpacked_data = struct.unpack(format_string, header_data)
在
unpacked_data
我收到错误
unpacked_data = struct.unpack(format_string, header_data)
struct.error: bad char in struct format
如果我从
<
中删除 format_string
或者如果我将 <
作为 format_string
中的第一行,然后是剩余的行(H
没有 <
),此错误就会消失。
问题是二进制规范说
build
是小端字节序。
我能做什么?
struct
期望字节顺序符号 (<
) 位于格式字符串的开头。在您的例子中,您有 5 个字段:4 个单字节字段(字节顺序无关紧要)和 1 个两字节字段(小端字节序)。所以你可以使用格式字符串<BBBBH
:
>>> binary_data = b'\x01\x02\x03\x04\x01\xff'
>>> struct.unpack('<BBBBH', binary_data)
(1, 2, 3, 4, 65281)
我们可以看到这是正确的,因为
\x01\xff
作为小端,应该是十六进制0xFF01
,这就是我们得到的。