我正在尝试理解Python显示表示二进制数据的字符串的方式。
以下是使用os.urandom
的示例In [1]: random_bytes = os.urandom(4)
In [2]: random_bytes
Out[2]: '\xfd\xa9\xbe\x87'
In [3]: random_bytes = os.urandom(4)
In [4]: random_bytes
Out[4]: '\r\x9eq\xce'
在random_bytes
的第一个示例中,在每个\ x之后,似乎有十六进制形式的值:fd a9为87。
然而,在第二个例子中,我不明白为什么显示'\r\x9eq\xce'
。
为什么Python会在这个特定的表示中向我显示这些随机字节?我该如何解释'\r\x9eq\xce'
?
答案 0 :(得分:10)
仅对(1)不可打印的字符使用\xHH
表示法; (2)没有较短的escape sequence。
要检查十六进制代码,可以使用binascii
模块:
In [12]: binascii.hexlify('\r\x9eq\xce')
Out[12]: '0d9e71ce'
如你所见:
\r
与\x0d
相同(它是ASCII回车符,CR); q
与\x71
相同(后者是前者的十六进制ASCII code。答案 1 :(得分:3)
\ r是回车符,q是q字符 - 你应该参考它们的ASCII值(0x0d和0x71)
每当python可以 - 它将显示相应的ASCII字符,只有当它不能时才会看到\ x(通常当字节高于0x79时)