如何在Python构造中推断数据结构字段的值?
下面是一个使用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
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'