二进制数据的Python字符串表示

时间:2012-02-19 15:18:42

标签: python

我正在尝试理解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'

2 个答案:

答案 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时)