在python中将两个16位字转换为float

时间:2016-02-24 13:09:52

标签: python byte

我编写了一个从modbus通道读取并返回单词元组(16位)的脚本。 我需要将它们翻译成十进制数字,我该怎么办? 我一直在审查这个'结构'但是,我不确定如何使用它来实现这一点。

编辑: 我举个例子。文件后,(43H,C8H)应翻译成400(十进制)。

然而,modbus包返回一个两个整数的python元组,如(1000,60450)。

BR,

1 个答案:

答案 0 :(得分:0)

您没有指定,所以我假设您将每个单词存储为普通整数。查阅format character table并选择一个大小为2字节的C类型,并为您的单词提供合适的范围。 “H”适用于未签名的单词。使用所选类型将pack两个整数转换为字符串。然后unpack进入浮动。

import struct
t = (123, 456)
packed_string = struct.pack("HH", *t)
unpacked_float = struct.unpack("f", packed_string)[0]
print unpacked_float
#result: 7.34690863652e-38

你可以用同样的方法反转程序 - 打包,然后打开包装。

print struct.unpack("HH", struct.pack("f", unpacked_float))
#result: (123,456)

编辑:另一个例子。

>>> t = (1000, 60450)
>>> import struct
>>> packed_string = struct.pack("HH", *t)
>>> unpacked_float = struct.unpack("f", packed_string)[0]
>>> print unpacked_float
-7.83457718087e+26
>>> print struct.unpack("HH", struct.pack("f", unpacked_float))
(1000, 60450)