【问题标题】:How do I convert a base 10 float to hex in Python 2.4?如何在 Python 2.4 中将基数为 10 的浮点数转换为十六进制?
【发布时间】:2011-02-23 15:42:52
【问题描述】:

我试图将数字从十进制转换为十六进制。如何在 Python 2.4.3 中将 float 值转换为十六进制或字符?

然后我希望能够将其打印为 ("\xa5\x (new hex number here)")。我该怎么做?

【问题讨论】:

  • 你想要 IEEE 浮点数的二进制表示为十六进制,你只是想要十六进制的整数部分,还是你想要整个十六进制的东西?
  • 嗨,你这个有什么用?如果您打印/读取数字,您是否试图保持小数精度?你可能想看看十进制浮点数,它更便于携带,你不会在你的门口遇到一个愤怒的暴徒,拿着火把和干草叉。

标签: python floating-point decimal python-2.4


【解决方案1】:

来自 python 2.6.5 docs hex(x) 定义:

要获得浮点数的十六进制字符串表示,请使用 float.hex() 方法。

【讨论】:

  • 您能举个例子来说明它的使用吗?我正在尝试使用 float.hex(value) 将此 0.554 转换为十六进制?我怎样才能把它写成 (\x30\x30\x35\x35)?
  • 在这种情况下,您可以将其写为 0.554.hex()。但结果会与您的预期大相径庭。见docs.python.org/library/stdtypes.html#float.hex
  • 我意识到 OP 真正想要的是数字的 ASCII 码的十六进制值。我没有编辑我的答案,因为杰里米已经在下面给出了解决方案。在任何情况下 jordan 0.554 == '\x30\x30\x35\x35' 给出的提示也是错误的,因为没有指出小数点,实际上是 '\x30\x30\x35\x35' == '0055'。
【解决方案2】:

从这条评论来看:

请您提供一个 它的使用示例?我在尝试着 通过使用将此 0.554 转换为十六进制 float.hex(值)?我该怎么写 它为 (\x30\x30\x35\x35)? – 约旦2010 1 小时前

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

“5” = 53(基数 10)= 0x35(基数 16)

您可以使用 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

【讨论】:

  • 那太好了,谢谢。我打包数据,但我想知道是否可以从 \x30\x2E\x35\x35\x34 中删除 \x2E
  • 我知道了,但如果我试图找到 5 我无法以这种形式表示它 \x30\x30\x30\x35
【解决方案3】:

您不能将浮点数直接转换为十六进制。您需要先转换为 int。

hex(int(value))

请注意,int 总是向下舍入,因此您可能希望在转换为 int 之前明确地进行舍入:

hex(int(round(value)))

【讨论】:

  • 是的,明白,但我该怎么做;我将十六进制转换为十进制。但是,我的问题是在python中将此浮点十进制数转换为十六进制例如:0.26的十六进制是\x30\x32\x36\x36,如何在Python中完成?
  • 什么意思,转成十进制?你能举例说明你做了什么吗?表示十进制数可以有很多不同的方式,所以如果你能详细描述它(或提供一些代码)会很有帮助。
猜你喜欢
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 2010-12-08
  • 2020-07-01
  • 1970-01-01
相关资源
最近更新 更多