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

时间:2014-06-04 03:44:11

标签: python

我有一堆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' A'到' 41'或者' 41'到了'。两者都不是我想要的。正确?

>>>print len('\xC0\x6F\xCA\x5E\x35\x00\x00\x00')
8
>>>print len(myString)
32

现在我知道为什么会这样,但我仍然不知道如何解决这个问题。

1 个答案:

答案 0 :(得分: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将其首先转换为字节。