gpt4 book ai didi

python - 为未对齐的 int 字段构造解析?

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:13 24 4
gpt4 key购买 nike

我正在使用这个漂亮的小包“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})

谢谢

奥利弗

最佳答案

如果构造包含 Int24 类型,这将很容易,但事实并非如此。相反,您可以像这样自己指定位长度:

>>> from construct import BitStruct, BitField
>>> sample = "\xff\x01\x01\x01"
>>> c = BitStruct("foo", BitField("status", 8), BitField("i", 24))
>>> c.parse(sample)
Container({'status': 255, 'i': 65793})

注意:值\x01\x01\x0165536 + 256 + 1 = 65793

关于python - 为未对齐的 int 字段构造解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9119968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com