如何在Python 2.4中将十进制浮点数转换为十六进制?

0 投票
3 回答
3634 浏览
提问于 2025-04-15 23:08

我想把十进制的数字转换成十六进制。请问在Python 2.4.3中,怎么把float类型的值转换成十六进制或者字符呢?

然后我想把它打印成这样的格式:("\xa5\x (这里填上新的十六进制数字)")。我该怎么做呢?

3 个回答

0

你不能直接把浮点数转换成十六进制。你需要先把它转换成整数。

hex(int(value))

要注意,整数转换总是向下取整,所以在转换成整数之前,你可能想要先进行四舍五入。

hex(int(round(value)))
1

从 Python 2.6.5 的文档中关于 hex(x) 的定义:

如果你想把一个浮点数转换成十六进制字符串,可以使用 float.hex() 这个方法。

1

根据这条评论来看:

你能给个使用的例子吗?我想用 float.hex(value) 把这个 0.554 转换成十六进制,怎么写成 (\x30\x30\x35\x35) 呢? – jordan2010 1小时前

你真正想要的是这些数字字符的 ASCII 码的十六进制表示,而不是一个实际的浮点数的十六进制表示。

"5" 的十进制是 53,转换成十六进制就是 0x35。

你可以用 ord() 函数来获取每个字符的 ASCII 码,像这样:

>>> [ ord(char) for char in "0.554" ]
[48, 46, 53, 53, 52]

你想要一个人类可读的表示吗? hex() 函数会给你一个,但格式和你要求的不同:

>>> [ hex(ord(char)) for char in "0.554" ]
['0x30', '0x2e', '0x35', '0x35', '0x34']
#   0      .        5       5       4

相反,你可以使用字符串替换和合适的格式化工具。

res = "".join( [ "\\x%02X" % ord(char) for char in "0.554" ] )
>>> print res
\x30\x2E\x35\x35\x34

不过如果你想要序列化数据,可以看看 struct 模块,它可以把数据打包到缓冲区里。

编辑以回答 jordan2010 的第二条评论

这里有个快速的方法,可以在数字前面加上零。

>>> padded_integer_str = "%04d" % 5
>>> print padded_integer_str
0005
>>> res = "".join( [ "\\x%02X" % ord(char) for char in padded_integer_str] )
>>> print res
\x30\x30\x30\x35

想了解字符串格式化的解释,可以查看 http://docs.python.org/library/stdtypes.html#string-formatting

撰写回答