我正在使用Python construct解析器来处理一些二进制数据,但无法以我期望的方式获得字符串。在
请注意,在下面的简化示例中,我可以使用unpack甚至只是一个片段,但是我正在解析的实际数据并没有整齐地与字节边界对齐。在
一些示例代码:
from construct import BitStruct, BitField, Padding, String
struct = BitStruct("foo",
BitField("bar", 8),
BitField("baz", 16),
Padding(4),
BitField("bat", 4)
)
struct2 = BitStruct("foo",
BitField("bar", 8),
String("baz", 16),
Padding(4),
BitField("bat", 4)
)
data = "\x01AB\xCD"
print struct.parse(data)
print struct2.parse(data)
这将打印输出:
^{pr2}$我原以为String会将AB
作为一个实际字符串返回给我。但是它返回的是等效的二进制字符串。在
如何说服construct返回实际的ASCII字符串?在
python模块bitstruct也可用于解析位字段。它使用格式字符串,就像标准的library struct模块一样。在
格式说明符“t”用于文本。在
我通过创建一个Adapter来解决这个问题。原始的ASCII值被解析成一个整数列表,然后这些整数可以转换成字符串表示。在
这不是最优雅的方法,但由于BitStruct只对位值进行操作,所以它似乎是最简单的解决方法。改进后的版本将解析不同长度的字符串(例如7位ASCII)。在
该输出:
^{pr2}$这是正确的-
C
字节被丢弃,因为它被标记为填充,这是可以的。在相关问题 更多 >
编程相关推荐