在 Python 中,我需要将一堆 float 转换为十六进制。它需要补零(例如,0x00000010 而不是 0x10)。就像 http://gregstoll.dyndns.org/~gregstoll/floattohex/做。 (遗憾的是我不能在我的平台上使用外部库,所以我不能使用该网站上提供的库)
最有效的方法是什么?
最佳答案
这在 python 中有点棘手,因为不打算将浮点 值 转换为(十六进制)整数。相反,您尝试解释 IEEE 754浮点值的二进制表示为十六进制。
我们将使用内置 struct
中的 pack
和 unpack
函数图书馆。
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/