【问题标题】:How to convert hexadecimal string to character with that code point?如何使用该代码点将十六进制字符串转换为字符?
【发布时间】:2017-07-16 18:41:42
【问题描述】:

我有字符串x = '0x32',想把它变成y = '\x32'
请注意len(x) == 4len(y) == 1

我尝试使用z = x.replace("0", "\\"),但这会导致z = '\\x32'len(z) == 4。我怎样才能做到这一点?

【问题讨论】:

  • 抱歉标题复杂;欢迎提供更好的措辞建议。

标签: python string hex ascii python-2.x


【解决方案1】:

您不必那么难:您可以使用int(..,16) 来解析0x... 形式的十六进制字符串。接下来,您只需使用 chr(..) 将该数字转换为具有该 Unicode 的字符(如果代码小于 128 ASCII)代码:

y = chr(int(x,16))

这会导致:

>>> chr(int(x,16))
'2'

但是\x32等于'2'(可以在ASCII表中查):

>>> chr(int(x,16)) == '\x32'
True

和:

>>> len(chr(int(x,16)))
1

【讨论】:

    【解决方案2】:

    试试这个:

    z = x[2:].decode('hex')
    

    【讨论】:

    • 这是我见过的最pythonic的答案,它实际上很漂亮。编码不仅仅是它是否有效。这就是 python 的意义所在。
    • @firstName 谢谢,但遗憾的是 str.decode() 方法在 Python 3 中消失了。在那里,更不优雅的等价物是 bytes.fromhex(x[2:]).decode('utf-8')
    【解决方案3】:

    '\x32' 之类的代码点包含在带引号的字符串中的能力对于仅在源代码中的文字值中起作用的程序员来说是一种便利。一旦您在内存中操作字符串,您将无法再使用该选项,但还有其他方法可以根据其代码点值将字符转换为字符串。

    还要注意'\x32' 产生的字符串与'2' 完全相同;它只是以不同的方式输入。

    给定一个包含十六进制文字的字符串,您可以使用int(str,16) 将其转换为数值。获得数值后,您可以通过chr() 将其转换为具有该代码点的字符。所以把它们放在一起:

    x = '0x32'
    print(chr(int(x,16)))
    #=> 2
    

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 2018-01-31
      • 1970-01-01
      • 2017-08-23
      • 2014-03-19
      • 1970-01-01
      • 2018-01-26
      • 2014-12-04
      相关资源
      最近更新 更多