[英]os.urandom and byte representation
我对python2中os.urandom
的输出格式有一个非常基本的问题,更一般地讲字节表示。 一个字节为8位,因此例如以二进制形式,特定的单个字节为:
10011001
os.urandom(n)
返回一个适合加密用途的随机n字节字符串。 如果我打印出对os.urandom(1)
的少量调用,仅生成一个字节, 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)。 我的困惑是,上述内容中只有一部分是两位数的十六进制数字,也有诸如“ S”或“?”之类的字符 要么 '['。 输出格式是什么? 将类似[[]的输出转换为二进制的规则是什么?
os.urandom
确实没有任何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()
来显示其十进制值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.