一般问题是我需要十六进制字符串保持该格式以将其分配给变量而不是保存编码?
不好:
>>> '\x61\x74'
'at'
>>> a = '\x61\x74'
>>> a
'at'
效果很好,但不是:
>>> '\x61\x74'
'\x61\x74' ????????
>>> a = '\x61\x74'
>>> a
'\x61\x74' ????????
一般问题是我需要十六进制字符串保持该格式以将其分配给变量而不是保存编码?
不好:
>>> '\x61\x74'
'at'
>>> a = '\x61\x74'
>>> a
'at'
效果很好,但不是:
>>> '\x61\x74'
'\x61\x74' ????????
>>> a = '\x61\x74'
>>> a
'\x61\x74' ????????
使用r
前缀(在 SO 上解释)
a = r'\x61\x74'
b = '\x61\x74'
print (a) #prints \x61\x74
print (b) # prints at
它是相同的数据。Python 允许您使用不同的方法指定文字字符串,其中一种方法是使用转义码来表示字节。
因此,'\x61'
是与 相同的字符值'a'
。Python 只是选择将可打印的 ASCII 字符显示为可打印的 ASCII 字符而不是转义码,因为这使得使用字节串变得更加容易。
如果您需要文字斜杠、x
字符以及两位数字6
和1
字符(因此是长度为 4 的字符串),则需要将斜杠加倍或使用原始字符串。
为了显示:
>>> '\x61' == 'a' # two notations for the same value
True
>>> len('\x61') # it's just 1 character
1
>>> '\\x61' # escape the escape
'\\x61'
>>> r'\x61' # or use a raw literal instead
'\\x61'
>>> len('\\x61') # which produces 4 characters
4