python

时间:2017-06-06 18:31:02

标签: python python-3.x binary binaryfiles unpack

我正在努力解决Python 3.6中的数字格式问题。我的目标是将文件中的二进制数据转换为可打印的十进制数。作为一个例子,我需要以字节串形式转换两个小端字节...

B '\ X12 \ 00'

进入大端二进制形式...

0000000000010010

最后是16-bit fixed-point Q15十进制数字形式...

(1/4096)+(1/16384)= 0.00030517578 (基本上,我们将2字节设置为人类可读的)

在我失败的尝试中,struct.unpack函数似乎很有希望,但我的低级/数字表示体验目前还不是很成熟。

尝试失败:

struct.unpack('<h', b'\x12\x00') # Yields (18,)

上面的代码让我“18”,如果字节代表一个整数,那就没问题了,但它们没有。

任何帮助/建议将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

@jasonharper在问题评论中回答 -

  

字节确实表示一个整数 - 已经移位了15位。除以32768(2 ** 15)得到实际的Q15值。 (这与您计算的值不匹配,但这是因为您的数学运算错误 - 两个设置位实际上具有1/2048和1/16384的位值。)

我通过以下代码获得了正确的值 -

struct.unpack('<h', b'\x12\x00')[0] / (2**15)