将64位浮点格式字符串转换为浮点数

2 投票
1 回答
663 浏览
提问于 2025-04-18 08:31

我有一堆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 将它转换成字节。

撰写回答