我经常需要编写与二进制文件格式交互的代码,而这些文件格式并没有现有的工具。我正在寻找一种简单的方法来实现针对结构化二进制格式的读取器/编写器 - 最好是能够让我使用某种简单的声明性格式创建读取器。
我发现了Construct模块,它可以工作,但似乎作者已经基本放弃了它。我想知道是否有任何替代方案可供人们使用。
个人建议使用bitstring模块,但我可能有偏见,因为我编写了它。在手册中有一些简单的代码示例,用于读取/写入二进制格式。
这是通过二进制格式创建对象的一种方法:
fmt = 'sequence_header_code,
uint:12=horizontal_size_value,
uint:12=vertical_size_value,
uint:4=aspect_ratio_information,
...
'
d = {'sequence_header_code': '0x000001b3',
'horizontal_size_value': 352,
'vertical_size_value': 288,
'aspect_ratio_information': 1,
...
}
s = bitstring.pack(fmt, **d)
以及一种之后解析它的方法:
>>> s.unpack('bytes:4, 2*uint:12, uint:4')
['\x00\x00\x01\xb3', 352, 288, 1]