os.urandom和字节表示

时间:2016-04-09 01:51:44

标签: python random binary byte

我有一个关于python2中os.urandom的输出格式的基本问题,以及更一般的字节表示。一个字节是8位,因此例如在二进制中,特定的单个字节将是:

10011001

os.urandom(n)返回适合加密使用的随机n字节字符串。如果我打印出对os.urandom(1)的少量调用,只生成一个字节,我会发现如下内容:

'\x1f', '\xa0', '#', '\xa4', "'", '\xa8', '+', '\xac', '/', '\xb0', '3', '\xb4', '7', '\xb8', ';', '\xbc', '?', '\xc0', 'C', '\xc4', 'G', '\xc8', 'K', '\xcc', 'O', '\xd0', 'S', '\xd4', 'W', '\xd8', '['

所以似乎urandom()表示一个字节不是8位而是2位十六进制数(当然都有意义,因为2 ^ 8 = 16 ^ 2)。我的困惑是,只有上面的一些是2位十六进制数字,还有像' S'或'?'或者' ['。什么是输出格式?转换像' ['成二进制?

1 个答案:

答案 0 :(得分:4)

它与os.urandom毫无关系 - 它只是repr()对所有字符串的作用。像这样:

>>> for ch in "\x1f\xa0#+\x01":
...     print("%6s %3d" % (repr(ch), ord(ch)))
'\x1f'  31
'\xa0' 160
   '#'  35
   '+'  43
'\x01'   1

通常,如果一个字节对应于可打印的ASCII字符,repr会显示该字符,否则会产生十六进制\x转义。

要在Python 2中清楚地查看字节,请按照上面的模式,迭代字符/字节并使用ord()显示其小数值。