繁体   English   中英

os.urandom和字节表示

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM