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

时间:2019-03-14 17:31:54

标签: python parsing construct

以下是使用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')来初始化结构,并让其自己找出length字段的适当值?

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

这应该是原则上可行的,还是我误解了construct的意识形态?

1 个答案:

答案 0 :(得分:0)

在这种情况下,我相信您正在寻找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'