python中的定点二进制解包

2024-04-25 22:37:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python3.6中遇到了一个数字格式问题。我的目标是将二进制数据从文件转换成可打印的十进制数。例如,我需要转换两个字节串形式的小端字节。。。在

b'\x12\00'

变成它的大端二进制形式。。。在

0000000000010010

最后是它的16-bit fixed-point Q15十进制数形式。。。在

(1/4096)+(1/16384)=0.00030517578(基本上,我们已经使上面的2个字节可读)

在我失败的尝试中解包结构函数似乎很有前途,但我的低级/数字表示经验目前还不太成熟。在

失败的尝试:

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

上面的代码得到的是“18”,如果字节表示一个整数,那就可以了,但是它们不是。在

如有任何帮助/建议,将不胜感激。谢谢您!在


Tags: 数据目标字节格式二进制bit数字形式
1条回答
网友
1楼 · 发布于 2024-04-25 22:37:52

由@jasonharper在问题评论中回答

The bytes do represent an integer - which has been shifted by 15 bits. Divide by 32768 (2**15) to get the actual Q15 value. (This doesn't match the value you calculated, but that's because you did the math wrong - the two set bits actually have place values of 1/2048 and 1/16384.)

我通过下面的代码实现了正确的值

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

相关问题 更多 >