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

在python中将两个16位字转换为浮点,python,byte,Python,Byte,我编写了一个脚本,它从modbus通道读取并返回单词元组(16位)。 我需要把它们转换成十进制数,我该怎么做? 我一直在查看“struct”python包,但是,我不确定如何使用它来实现这一点 编辑: 我举个例子。按照文件要求,(43H,C8H)应翻译成400(十进制) 但是,modbus包返回两个整数的python元组,如(100060450) BR,您没有指定,因此我假设您将每个单词存储为普通整数。请参阅并选择一个大小为2字节且适合您的单词范围的C类型。“H”适用于无符号字使用所选类型将两个

我编写了一个脚本,它从modbus通道读取并返回单词元组(16位)。 我需要把它们转换成十进制数,我该怎么做? 我一直在查看“struct”python包,但是,我不确定如何使用它来实现这一点

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

但是,modbus包返回两个整数的python元组,如(100060450)


BR,

您没有指定,因此我假设您将每个单词存储为普通整数。请参阅并选择一个大小为2字节且适合您的单词范围的C类型。“H”适用于无符号字<代码>使用所选类型将两个整数打包成字符串。然后
将其解压成浮点数

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)

word对象的类型名称是什么?它是内置类型吗?用一个示例编辑。有一个指向文档的链接,上面说(43H,C8H)应该翻译成400吗?我用这段代码翻译了给出的示例,但它不起作用。奇怪,对我来说效果很好。如果您遇到错误,您会遇到什么错误?如果你得到的输出与你期望的不同,你得到了什么输出,你期望得到什么输出?这就是重点。按照问题(后期编辑)中给出的示例,(43H,C8H)应转换为400。因为(43H,C8H)是(67200),这不起作用,对吧?好吧,我想我们超出了我的专业领域,因为我不知道“43H”应该代表什么。它不是十六进制,因为它只升到F。。。它是以36为基数的吗?它是十六进制,16位。一个字由两个寄存器组成,每个寄存器8位。所以每个单词都由两位十六进制数表示