将十六进制转换为浮点后,结果是错误的

时间:2019-01-08 17:00:47

标签: python python-3.x struct

我正在尝试使用Python 3.6将十六进制4991a480转换为浮点数

>>> struct.unpack('!f',bytes.fromhex("4991a480"))
(1193104.0,)

但是它不能正常工作。

我想要得到的结果是1.1931e + 06。我使用了一个转换网站,它给出了我期望的结果。我究竟做错了什么?

2 个答案:

答案 0 :(得分:3)

这是同一件事,您只需要将其([Python 3]: Format Specification Mini-Language)格式化为指数符号[Wikipedia]: IEEE 754):

>>> import struct
>>> unpacked = struct.unpack("!f", bytes.fromhex("4991a480"))
>>> unpacked
(1193104.0,)
>>> print("{:e}".format(unpacked[0]))
1.193104e+06

请注意,[Python 3]: struct.unpack(format, buffer)返回一个元组

答案 1 :(得分:2)

打印出的值实际上是您期望的答案,用长格式表示法而不是科学表示法。这里没有问题。

有关科学符号的更多信息,请参见this