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)
如果这个问题已经在这里得到回答,我深表歉意。我的搜索出现了类似的问题,但我未能将它们应用到我的情况中。
我通过串行通信接收两个 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)