Python3.4 将 int16_t 字符串转换为有符号浮点数

Python3.4 convert int16_t string to signed float

如果这个问题已经在这里得到回答,我深表歉意。我的搜索出现了类似的问题,但我未能将它们应用到我的情况中。

我通过串行通信接收两个 16 位十六进制字节的数据。现在由两个 python 整数表示。 [48822, 15938]

这些字节代表一个带符号的浮点变量。即 [48822, 15938]-->[0xbeb6, 0x3e42]-->[0x3e42beb6]-->[0.190181]

我如何在 python3.4 中完成此转换?

>>> import struct
>>> f = struct.unpack('f',struct.pack('HH', 48822,15938))[0]
>>> f
0.19018062949180603
>>> 

您可以使用 *lst 将列表转换为 struct.pack 的参数。

如果您通过这种方式获取大量数据,您可能需要考虑使用 numpy。可以打包一个dtype为np.uint16的缓冲区,直接查看内容为np.float32,无需复制任何数据:

n = 1
buffer = np.zeros(2 * n, dtype=np.uint16)
floats = buffer.view(np.float32)
buffer[:2] = [48822, 15938]
print(floats)