如何将十六进制字符串转换为具有该代码点的字符?

时间:2017-02-26 02:11:21

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

我有字符串x = '0x32',并希望将其转换为y = '\x32' 请注意len(x) == 4len(y) == 1

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

3 个答案:

答案 0 :(得分:5)

您不必那么难:您可以使用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

答案 1 :(得分:3)

试试这个:

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

答案 2 :(得分:2)

在引用的字符串中包含git cherry-pick --abort等代码点的能力对程序员来说是一种便利,它只能在源代码中的文字值中工作。一旦你在内存中操作字符串,你就无法再使用该选项,但还有其他方法可以根据代码点值将字符转换为字符串。

另请注意,'\x32'会产生与'\x32'完全相同的字符串;它的输入方式不同。

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

chr()