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



是否有任何解决方案可以使用IEEE-754浮点约定将十进制浮点转换为64位十六进制?

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

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

如何使用 Python 做到这一点?

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

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

>>> import struct
>>> x = 4275451536.0
>>> bytes_of_x = struct.pack('<d', x)
>>> bytes_of_x
'x00x00x00xd2xc6xdaxefA'
>>> x_as_int = struct.unpack('<Q', bytes_of_x)[0]
>>> x_as_int
4751256679360757760
>>> hex(x_as_int)
'0x41efdac6d2000000'

从您的问题中不清楚您是从实际的十进制字符串还是 Python float开始; 上面的示例以 float 开头。 如果输入数据采用十进制字符串的形式,则需要先将其转换为浮点数:

>>> my_input = "4275451536"
>>> x = float(my_input)
>>> # ... rest of the code as before

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

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

最新更新