我正在使用这个漂亮的小包“ construct ”进行二进制数据解析。但是,我遇到了格式定义为的情况:
31 24 23 0
+-------------------------+
| status | an int number |
+-------------------------+
基本上,高 8 位用于状态,剩下 3 个字节用于整数:高位被屏蔽的 int 类型。我对定义格式的正确方法有点迷茫:
- 蛮力方法是将其定义为
ULInt32
并自己进行位掩蔽 - 无论如何我可以使用 BitStruct 来省去麻烦吗?
编辑
假设 Little Endian 并基于 jterrace 的示例和 swapped=True 建议,我认为这将适用于我的情况:
sample = "\xff\x01\x01\x01"
c = BitStruct("foo", BitField("i", 24, swapped=True), BitField("status", 8))
c.parse(sample)
Container({'i': 66047, 'status': 1})
谢谢
奥利弗