【发布时间】:2017-11-07 21:43:15
【问题描述】:
我正在努力解决 Python 3.6 中的数字格式问题。我的目标是将文件中的二进制数据转换为可打印的十进制数字。例如,我需要将两个 little-endian 字节转换为字节串的形式...
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”,如果字节表示一个整数,那就没问题了,但事实并非如此。
任何帮助/建议将不胜感激。谢谢!
【问题讨论】:
-
字节确实代表一个整数 - 已被移动了 15 位。除以 32768 (2**15) 得到实际的 Q15 值。 (这与您计算的值不匹配,但那是因为您做错了数学 - 这两个设置位实际上具有 1/2048 和 1/16384 的位置值。)
-
@jasonharper 你说得对——很好!您的解决方案有效,我相信我理解您的方法。谢谢!
标签: python python-3.x binary binaryfiles unpack