python - 如何将 float 转换为十六进制

标签 python python-2.7 floating-point-conversion

在 Python 中,我需要将一堆 float 转换为十六进制。它需要补零(例如,0x00000010 而不是 0x10)。就像 http://gregstoll.dyndns.org/~gregstoll/floattohex/做。 (遗憾的是我不能在我的平台上使用外部库,所以我不能使用该网站上提供的库)

最有效的方法是什么?

最佳答案

这在 python 中有点棘手,因为不打算将浮点 转换为(十六进制)整数。相反,您尝试解释 IEEE 754浮点值的二进制表示为十六进制。

我们将使用内置 struct 中的 packunpack 函数图书馆。

float 是 32 位的。我们首先将它pack 成一个二进制1 字符串,然后将它unpack 作为一个int

def float_to_hex(f):
    return hex(struct.unpack('<I', struct.pack('<f', f))[0])

float_to_hex(17.5)    # Output: '0x418c0000'

我们可以对 double 做同样的事情,知道它是 64 位:

def double_to_hex(f):
    return hex(struct.unpack('<Q', struct.pack('<d', f))[0])

double_to_hex(17.5)   # Output: '0x4031800000000000L'

1 - 表示一串原始字节; 不是一串一和零。

关于python - 如何将 float 转换为十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23624212/

相关文章:

python - 如何使用 boto 匹配 AWS 中给定卷的特定标签?

c - 为什么在不需要时费心使用 float / double 文字?

c++ - 为什么 double 可以存储比 unsigned long long 更大的数字?

c - 浮点值条件

python - Pandas :用列表分隔行的记录

Python 模块 : how to prevent importing modules called by the new module

python - 你能像字符串替换一样快捷地使用Python方法吗?

python - 分析和解释python代码的工具

Python代码仅适用于标题标签,不适用于表格

python - 如果持有数据库连接的线程死亡,数据库连接是否会返回池?