Python解压12长度的二进制数据

1 投票
1 回答
874 浏览
提问于 2025-04-18 11:19

我有一个文件,里面存的是大端格式的二进制数据。这个文件里有两个数字字段,第一个字段的长度是8,第二个字段的长度是12。我该怎么把这两个数字提取出来呢?

我正在使用Python的struct模块(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 个回答

1

我觉得你应该为第二个数字创建一个长度为16的字节串,把最后12个字节填上你的数字的字节串,前面4个字节用零填充。

然后用解码的方法把这个字节串转换成两个变量,比如叫 numHInumLO,格式是 >QQ。接着,你可以用这个公式得到最终的数字:number = numHI * 2^64 + numLO。记得,Python里的整数几乎可以大到你想要的程度,所以不会有溢出的问题。这只是个大概念,如果你在写实际的Python代码时遇到问题,请留言,我会更新我的回答来提供更多帮助。

*这里的 ^ 是数学中的幂运算,所以请使用 math.pow。或者,你也可以用位移的方法:number = numHI << 64 + numLO

撰写回答