Python:将 2 个整数转换为浮点数

Posted

技术标签:

【中文标题】Python:将 2 个整数转换为浮点数【英文标题】:Python : Convert 2 ints to float 【发布时间】:2015-01-28 07:22:47 【问题描述】:

我一直在尝试将一组 2 个 16 位整数转换为一个 32 位浮点数。这是我在 MODBUS 通信协议方面的工作。 我的查询和here提到的一样

但是,当我按照那里提供的打包/解包方法进行操作时,我没有得到类似的结果。

这是我的测试程序:

from struct import *

tup=(16256, 0)

print hex(tup[0])
print hex(tup[1])

mypack = pack('>HH',tup[0],tup[1])
print mypack

f = unpack('f', mypack)[0]
print f

输出如下:

0x3f80
0x0
?
4.60060298822e-41

我希望最终输出实际上只是“1.0”,因为“0x3F800000”的浮点解释就是这样!

我在由 Debian OS 提供支持的 Beagle Bone Black 板上运行此代码。

我哪里出错了?

【问题讨论】:

【参考方案1】:

您需要在 unpack 调用中指定字节顺序。

from struct import *

tup=(16256, 0)

print hex(tup[0])
print hex(tup[1])

mypack = pack('>HH',tup[0],tup[1])
print `mypack`

f = unpack('>f', mypack)
print f

输出

0x3f80
0x0
'?\x80\x00\x00'
(1.0,)

但请记住您所链接的问题中提到的警告/注意事项,尤其是与 NaN 有关的警告/注意事项。

另请注意,执行from modulename import * 通常被认为是不好的做法,因为它将modulename 中的名称转储到您的脚本命名空间中。这很混乱,并且可能导致错误。所以最好这样做

import struct

#...

mypack = struct.pack('>HH',tup[0],tup[1])
f = struct.unpack('>f', mypack)

当然,要键入更多内容,但它使您的代码更易于阅读和维护。

【讨论】:

以上是关于Python:将 2 个整数转换为浮点数的主要内容,如果未能解决你的问题,请参考以下文章

LLVM 通过将整数转换为浮点数

在 C 中的某些整数上使用位操作中断将整数转换为浮点数

将 INT_MAX 转换为浮点数,然后再转换回整数。

将字节转换为浮点数?

如何在python中将23位浮点数从字符串转换为浮点数并返回?

无法将数组转换为浮点数python