Python - 搜索十六进制值标记并提取数据

时间:2013-06-25 12:22:22

标签: python parsing binary hex

我是python的新手,并且在发布之前尝试过寻求帮助。

我有二进制文件,其中包含我需要解析的许多值。每个值都有一个两个字节的十六进制标头和一个第三个字节,它给出了要解析的记录中数据的大小。以下是一个例子:

\x76\x12\x0A\x08\x00\x00\x00\x00\x00\x00\x00\x00

\x76\x12是记录标记,\x0A是下一个要读取的字节数。

此数据始终具有两个字节标记和第三个字节大小。但是,要解析的数据是可变的,记录标记的增量如下:\x76\x12\x77\x12依此类推,直到\x79\x12再次开始。

这只是使用此帖子的示例数据。

非常感谢您的帮助或指示。

2 个答案:

答案 0 :(得分:1)

这是你想要的吗?

>>> b = b'\x76\x12\x0A\x08\x00\x00\x00\x00\x00\x00\x00\x00'
>>> from StringIO import StringIO
>>> io = StringIO(b)
>>> io.seek(0)
>>> io.read(2) #read 2 bytes, maybe validate?
'v\x12'
>>> import struct
>>> nbytes = struct.unpack('B',io.read(1))
>>> print nbytes
(10,)
>>> data = io.read(nbytes[0])
>>> data
'\x08\x00\x00\x00\x00\x00\x00\x00\x00'

答案 1 :(得分:0)

这会将数据视为原始字符串(忽略'\'转义字符并拆分为列表

a = r"\x76\x12\x0A\x08\x00\x00\x00\x00\x00\x00\x00\x00".split('\\')
print a

输出:['','x76','x12','x0A','x08','x00','x00','x00','x00','x00','x00',' x00','x00']

然后,您可以遍历您感兴趣的值,并在需要时将它们转换为十进制:

for i in range(len(a[4:])): # cutting off records before index 4 here
    print int(str(a[i+4][1:]),16)