将IEEE 754 64位转换为十进制

2024-10-06 08:42:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个64位IEEE-754十六进制值的列表,存储为字符串,我想将其转换为pythonfloat

['40D3970060AA64C3', ...]

我尝试过使用binascii.unhexlify and解包结构`转换每个字符串,但由于这是64位,因此失败。在

我可以让它使用32位十六进制值:

^{pr2}$

结果:

(1.24735742022795e-38,)
(6.597178645388664e-39,)
(1.3950116788944702e-38,)

当我转到64位时:

import binascii
import struct

hex_list_64 = ['40D3970060AA64C3', '40D3970060AA64C3', '40D3970060AA64C3']

for i, value in enumerate(hex_list_64, 0):
    print(struct.unpack('<d', binascii.unhexlify(hex_list_64[i].replace(' ', ''))))

结果:

(-4.653463070196378e+16,)
(-4.653463070196378e+16,)
(-4.653463070196378e+16,)

但是,将40D3970060AA64C3转换为二进制,应该可以得到2.00600059000000001105945557356E4。通孔,http://www.binaryconvert.com/result_double.html?hexadecimal=40D3970060AA64C3


Tags: and字符串import列表forvalue结构struct
1条回答
网友
1楼 · 发布于 2024-10-06 08:42:49

与我的平台的顺序相反:

for value in hex_list_64:
    print(struct.unpack('<d', binascii.unhexlify(value)))

^{pr2}$

但是

for value in hex_list_64:
    print(struct.unpack('>d', binascii.unhexlify(value)))

(20060.0059,)
(20060.0059,)
(20060.0059,)

这是有意义的,因为Intel通常在内部以小端顺序存储所有内容,而字符串(如果解释为read)则定义为big-endian。在

相关问题 更多 >