Python : 将 2 个整数转换为浮点数
Python : Convert 2 ints to float
我一直在尝试将一组 2 个 16 位整数转换为单个 32 位浮点数。这是我在 MODBUS 通信协议方面的工作。
我的查询与提到的相同 here
然而,当我按照那里提供的 pack/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)[0]
print f
输出如下:
0x3f80
0x0
?
4.60060298822e-41
我希望最终输出实际上只是“1.0”,因为“0x3F800000”的浮点解释就是这样!
我 运行 这段代码在 Beagle Bone Black 开发板上,由 Debian OS 提供支持。
我哪里错了?
您需要在解包调用中指定字节顺序。
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)
当然,打字有点多,但它使您的代码更易于阅读和维护。
我一直在尝试将一组 2 个 16 位整数转换为单个 32 位浮点数。这是我在 MODBUS 通信协议方面的工作。 我的查询与提到的相同 here
然而,当我按照那里提供的 pack/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)[0]
print f
输出如下:
0x3f80
0x0
?
4.60060298822e-41
我希望最终输出实际上只是“1.0”,因为“0x3F800000”的浮点解释就是这样!
我 运行 这段代码在 Beagle Bone Black 开发板上,由 Debian OS 提供支持。
我哪里错了?
您需要在解包调用中指定字节顺序。
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)
当然,打字有点多,但它使您的代码更易于阅读和维护。