如何在Python 2.4中将十进制浮点数转换为十六进制?
我想把十进制的数字转换成十六进制。请问在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