Python解包二进制数据,长度为12的数字

时间:2014-06-27 13:09:30

标签: python struct binaries

我有一个带有大端二进制文件的文件。有两个数字字段。第一个长度为8,第二个长度为12.我如何解开这两个数字?

我正在使用Python模块结构(https://docs.python.org/2/library/struct.html),它适用于第一个字段

num1 = struct.unpack('>Q',payload[0:8])

但我不知道如何拆开第二个号码。如果我将其视为char(12),那么我会得到类似'\x00\xe3AC\x00\x00\x00\x06\x00\x00\x00\x01'的内容。

感谢。

1 个答案:

答案 0 :(得分:1)

我认为你应该为长度为16的第二个数字创建一个新的字节字符串,用保存数字的字节字符串填充最后12个字节,用零填充前4个字节。

然后使用格式为>QQ的unpack解码bytestring,让我们对numHInumLO变量说。然后,您将获得最终编号:number = numHI * 2^64 + numLO *。 AFAIR Python中的整数可以(几乎)尽可能大,因此溢出没有问题。这只是一个粗略的想法,如果您在实际的Python代码中编写问题请注释,我会编辑我的答案以提供更多帮助。

* ^在这种情况下是数学能力,所以请使用math.pow。或者,您可以使用字节移位:number = numHI << 64 + numLO