我有一堆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
现在我知道为什么会这样,但我仍然不知道如何解决这个问题。
答案 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
将其首先转换为字节。