如何使用IEEE-754浮点约定将十进制浮点数转换为64位十六进制

use*_*222 0 python floating-point decimal ieee-754

有没有使用IEEE-754浮点约定将十进制浮点数转换为64位十六进制的解决方案?

我有十进制4275451536,需要转换为IEEE-754十六进制,即41EFDAC6D2000000

这是一个在线转换器,但我需要用编程语言编写它.

如何使用Python做到这一点?

Mar*_*son 5

如果我正确理解您的问题,您希望找到IEEE 754二进制64格式浮点数的基础二进制表示,并以十六进制显示该二进制表示.

为了获得底层位,struct模块是你的朋友.该struct.pack操作允许您将binary64表示下面的8个原始字节解释为长度为8的(字节)字符串,struct.unpack然后操作将允许您将该字符串重新解释为非负整数(例如).一旦得到整数,就很容易找到十六进制表示.以下是您的数据的完整示例:

>>> import struct
>>> x = 4275451536.0
>>> bytes_of_x = struct.pack('<d', x)
>>> bytes_of_x
'\x00\x00\x00\xd2\xc6\xda\xefA'
>>> x_as_int = struct.unpack('<Q', bytes_of_x)[0]
>>> x_as_int
4751256679360757760
>>> hex(x_as_int)
'0x41efdac6d2000000'
Run Code Online (Sandbox Code Playgroud)

从你的问题不清楚你是从一个实际的十进制字符串,还是一个Python开始float; 上面的例子以a开头float.如果输入数据采用十进制字符串的形式,则首先要将其转换为float:

>>> my_input = "4275451536"
>>> x = float(my_input)
>>> # ... rest of the code as before
Run Code Online (Sandbox Code Playgroud)

或者全部在一行中,并使用字符串格式而不是hex内置来转换为十六进制字符串:

>>> '{:016x}'.format(struct.unpack('<Q', struct.pack('<d', float("4275451536")))[0])
'41efdac6d2000000'
Run Code Online (Sandbox Code Playgroud)