我有一个关于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'或'?'或者' ['。什么是输出格式?转换像' ['成二进制?
答案 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()
显示其小数值。