【问题标题】:Python convert a string containing hex to actual hexPython将包含十六进制的字符串转换为实际的十六进制
【发布时间】:2018-06-16 02:26:09
【问题描述】:

我有一个 hex 字符串,但我需要将其转换为 实际 hex。 例如,我有这个 hex 字符串

3f4800003f480000

我可以实现目标的一种方法是使用转义序列:

print("\x3f\x48\x00\x00\x3f\x48\x00\x00")

但是,我不能这样做,因为我想从多个变量一起创建我的十六进制。

我的程序的目的是:

  1. 输入一个数字,例如100
  2. 乘以100100 * 100 = 10000
  3. 将其转换为十六进制2710
  4. 添加0000
  5. 再次添加2710
  6. 再次添加0000

结果我期待的是2710000027100000。现在我需要将此十六进制数字作为参数传递给函数(作为十六进制)。

【问题讨论】:

  • Python Hexadecimal的可能重复
  • 在这个问题中,他们想将十进制转换为十六进制,但我有一个字符串已经包含十六进制
  • 如果你乘以 6553600 而不是乘以 100,那么在没有任何字符串操作的情况下,你已经达到了目标的一半。但是我并不完全清楚你的最终程序的目的。

标签: python hex decimal implicit-conversion


【解决方案1】:

在 Python 中,没有单独的类型作为“十六进制”。它将数字的十六进制表示法表示为str。您可以通过在hex() 上调用type 自己检查type

#         v  convert integer to hex
>>> type(hex(123))
<type 'str'>

但是为了将值表示为十六进制,Python 将0x 前置到表示十六进制 数字的字符串。例如:

>>> hex(123)
'0x7b' 

因此,在您的情况下,为了将您的字符串显示为等效的十六进制,您只需在其前面加上“0x”即可:

>>> my_hex = "0x" + "3f4800003f480000"

这样,如果您以后可能想将其转换为其他符号,比如说整数(根据您的问题陈述的性质,您肯定需要),您只需要使用 base 16 调用 int 为:

>>> int("0x3f4800003f480000", base=16)
4559894623774310400

事实上,Python 的解释器已经足够聪明了。如果你甚至不会在前面加上“0x”,它会处理它。例如:

>>> int("3f4800003f480000", base=16)
4559894623774310400

“0x”是关于表示字符串是十六进制字符串,以防有人正在查看/调试您的代码(将来),他们会明白的。这就是为什么它是首选。

所以我的建议是坚持使用 Python 的 Hex 样式,不要使用转义字符将其转换为 "\x3f\x48\x00\x00\x3f\x48\x00\x00" em>


来自Python's hex document

将整数转换为以“0x”为前缀的小写十六进制字符串。如果 x 不是 Python int 对象,它必须定义一个返回整数的 index() 方法。

【讨论】:

    【解决方案2】:

    试试binascii.unhexlify:

    返回十六进制字符串hexstr表示的二进制数据。

    示例:

    assert binascii.unhexlify('3f4800003f480000') == b"\x3f\x48\x00\x00\x3f\x48\x00\x00"
    

    【讨论】:

      【解决方案3】:
      >>> hex(int('3f4800003f480000', 16))
      '0x3f4800003f480000'
      

      【讨论】:

        猜你喜欢
        • 2012-06-05
        • 2011-04-01
        • 2023-04-08
        • 2018-01-22
        • 2018-01-31
        • 1970-01-01
        • 2020-06-20
        • 2012-05-30
        • 2019-07-27
        相关资源
        最近更新 更多