社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

ralien • 5 年前 • 1343 次点击  

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
 
1343 次点击  
文章 [ 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'