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

如何在Python构造中推断数据结构字段的值?,python,parsing,construct,Python,Parsing,Construct,下面是一个使用Python的construct库定义的简单标记长度值结构: 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

下面是一个使用Python的
construct
库定义的简单标记长度值结构:

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)
虽然示例正确地编码和解码了数据,但我需要提前知道
字段的长度,并通过
长度
参数提供它

是否有一种方法允许我通过传递最小值来初始化结构,即,
tlv\u data=dict(tag=1,value=b'\xFF\xFF\xFF\xFF\xFF')
并让它自己计算出
长度
字段的适当值应该是多少

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


这在原则上是可行的,还是我误解了
构造的思想?

在这种情况下,我相信
重建
就是你想要的

根据当前的示例:


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

根据当前的示例:

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