Py学习  »  Python

如何在Python构造中推断数据结构字段的值?

ralien • 5 年前 • 1348 次点击  

construct Python库:

Tlv = Struct(
    'tag' / Int16ub,
    'length' / Int32ub,
    'value' / Array(this.length, Byte)
    )

if __name__ == '__main__':
    tlv_data = dict(tag=1, length=5, value=b'\xFF\xFF\xFF\xFF\xFF')
    encoded = Tlv.build(tlv_data)
    print(encoded)
    decoded = Tlv.parse(encoded)
    print(decoded)

虽然示例正确地编码和解码了数据,但我需要知道 value 提前进场并通过 length 参数。

是否有一种方法允许我通过传递最小值来初始化结构,即。, tlv_data = dict(tag=1, value=b'\xFF\xFF\xFF\xFF\xFF') 并让它自己弄清楚 字段应该是?

同时,当我解析原始数据时,我希望它从原始数据中提取长度,然后确保 确实有那么多字节长。

这在原则上是有效的,还是我误解了 ?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53723
 
1348 次点击  
文章 [ 1 ]  |  最新文章 5 年前
kuanb
Reply   •   1 楼
kuanb    5 年前

我相信 Rebuild 就是你要找的,在这种情况下。

Construct's docs :

>>> st = Struct(
...     "count" / Rebuild(Byte, len_(this.items)),
...     "items" / Byte[this.count],
... )
>>> st.build(dict(items=[1,2,3]))
b'\x03\x01\x02\x03'