读取字节数据时得到结构格式的坏字符

问题描述 投票:0回答:1

我有以下规格的二进制数据

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
是小端字节序。

我能做什么?

python python-3.x endianness binary-data python-3.10
1个回答
0
投票

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
,这就是我们得到的。

© www.soinside.com 2019 - 2024. All rights reserved.