【发布时间】: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