【问题标题】:Python: Convert 8 byte IEEE754 number to floatPython:将 8 字节 IEEE754 数字转换为浮点数
【发布时间】:2018-04-30 20:22:05
【问题描述】:

我有以下 8 字节字符串构成二进制文件的一部分

b = b'?\xf0\x00\x00\x00\x00\x00\x00'

我想将其转换为浮点数(应该等于 7.371791007870371e+05)。到目前为止,我尝试过的方法都没有奏效:

  • literal_eval

    从 ast 导入literal_eval 文字评估(b) ValueError:错误的节点或字符串:b'?\xf0\x00\x00\x00\x00\x00\x00'

  • 按照@martineau 在这篇文章中的回答:How to convert a binary (string) into a float value?

    ValueError: int() 以 2 为基数的无效文字:b'?\xf0\x00\x00\x00\x00\x00\x00'

在这两种情况下,引发的错误都表明字符串“b”是无效的,但我不明白这是怎么可能的,因为它是直接从二进制文件中读取的。

【问题讨论】:

  • 您的字符串 b 可能无效(除了前 2 个字节外,它都是空字节)- 至少,该字符串不代表浮点数 7.371791007870371e+05。
  • btw 8 字节浮点数,您问题中的数字应类似于 b'\xc8[\x9a36\x7f&A'
  • struct.unpack('d', b'\xc8[\x9a36\x7f&A')[0] 应该可以工作。输出为737179.100787037
  • float 占用 4 个字节。您要转换 8 个字节中的哪一个?

标签: python floating-point binary type-conversion


【解决方案1】:

这应该将字节解包为双精度字节(8 个字节,而不是 4 个字节的浮点数)。请注意,我使用来自@wim 的值。

import struct
print(struct.unpack('d', b'\xc8[\x9a36\x7f&A')[0])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-05
    • 2023-03-22
    • 2016-08-21
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多