首页 > 解决方案 > python struct unpack bad char

问题描述

我正在尝试编写一个小包解析器,第一次使用 python 结构:

content = struct.unpack("BBBBBB<HBB", packet[:10])

数据包包含以下字节:

7e03 ffff ff0f 1e00 1001 0c00 0000 0000

我收到此错误:struct.error: bad char in struct format但我不知道我应该如何知道提到的坏字符是什么。另外请注意: struct 是否支持对元组元素进行分组,因为我宁愿像这样进行解包:

content = struct.unpack("BB(BBBB)<HBB", packet[:10])

因为这是一个地址,并且将它放在它自己的内容元组中会使 imo 更清晰。

标签: pythonpython-3.xstruct

解决方案


<不能在格式字符串的中间,必须在前面。

它指定 little-endian 字节顺序并适用于整个数据包(但对于使用 指定的单字节值没有区别B):

>>> packet = b'\x7e\x03\xff\xff\xff\x0f\x1e\x00\x10\x01\x0c\x00\x00\x00\x00\x00'
>>> struct.unpack("<BBBBBBHBB", packet[:10])
(126, 3, 255, 255, 255, 15, 30, 16, 1)

要将四个字节解释为一个无符号整数,请使用Ior L

>>> struct.unpack("<BBIHBB", packet[:10])
(126, 3, 268435455, 30, 16, 1)

推荐阅读