我正在努力解决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”,如果字节代表一个整数,那就没问题了,但它们没有。
任何帮助/建议将不胜感激。谢谢!
答案 0 :(得分:1)
@jasonharper在问题评论中回答 -
字节确实表示一个整数 - 已经移位了15位。除以32768(2 ** 15)得到实际的Q15值。 (这与您计算的值不匹配,但这是因为您的数学运算错误 - 两个设置位实际上具有1/2048和1/16384的位值。)
我通过以下代码获得了正确的值 -
struct.unpack('<h', b'\x12\x00')[0] / (2**15)