将64位浮点格式字符串转换为浮点数
我有一堆64位浮点格式的字符串,现在需要把它们转换成浮点数。我知道这种格式长什么样,但我在想有没有什么内置的函数可以直接完成这个工作,比如:
convertToFloat(C06FCA5E35000000) --> -254.324
convertToFloat(405F7D70A4000000) --> +125.96
我知道怎么手动把这些位模式转换成数字,但这需要很多位移操作。有没有更好的方法呢?
我把 'C06FCA5E35000000' 修改成了 '\xC0\x6F\xCA\x5E\x35\x00\x00\x00',然后存储到 myString 里。
>>>print (myString)
\xC0\x6F\xCA\x5E\x35\x00\x00\x00
>>>d = struct.unpack('>d', myString)
d = struct.unpack('>d', myString)
struct.error: unpack requires a string argument of length 8
这是为什么呢?
我没有使用 binascii.a2b_hex 或 binascii.b2a_hex,因为它们会把 'A' 转换成 '41',或者把 '41' 转换成 'A'。这两者都不是我想要的,对吧?
>>>print len('\xC0\x6F\xCA\x5E\x35\x00\x00\x00')
8
>>>print len(myString)
32
现在我知道为什么会这样,但我还是不知道怎么解决这个问题。
1 个回答
5
你可以使用 struct.unpack
。>d
表示大端格式的双精度浮点数;想了解更多,可以查看 help(struct)
!
import struct
d, = struct.unpack('>d', b'\xc0\x6f\xca\x5e\x35\x00\x00\x00')
print(d)
# -254.32399988174438
如果你的字符串确实是 'C06FCA5E35000000'
,你可以先用 binascii.a2b_hex
将它转换成字节。