我正在为二进制格式编写一个解析器。这种二进制格式涉及不同的表,这些表同样采用二进制格式,通常包含不同的字段大小(其中 50 - 100 个之间)。
大多数这些结构都有位域,并且在 C 语言中表示时看起来像这样:
struct myHeader
{
unsigned char fieldA : 3
unsigned char fieldB : 2;
unsigned char fieldC : 3;
unsigned short fieldD : 14;
unsigned char fieldE : 4
}
我遇到了 struct 模块,但意识到它的最低分辨率是一个字节而不是一个位,否则该模块几乎非常适合这项工作。
我知道使用 ctypes 支持位字段,但我不确定如何在此处连接包含位字段的 ctypes 结构。
我的另一个选择是自己操作这些位并将其输入字节并与 struct 模块一起使用 - 但由于我有接近 50-100 种不同类型的此类结构,因此编写代码变得更容易出错。我还担心效率,因为该工具可能用于解析大千兆字节的二进制数据。
Thanks.
Using 位串 https://bitstring.readthedocs.io/en/latest/index.html(你提到你正在考虑)它应该很容易实现。首先创建一些要解码的数据:
>>> myheader = "3, 2, 3, 14, 4"
>>> a = bitstring.pack(myheader, 1, 0, 5, 1000, 2)
>>> a.bin
'00100101000011111010000010'
>>> a.tobytes()
'%\x0f\xa0\x80'
然后再次解码只是
>>> a.readlist(myheader)
[1, 0, 5, 1000, 2]
您主要关心的可能是速度。该库是经过良好优化的 Python 库,但速度远不及 C 库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)