私は、python2での出力フォーマットos.urandom
と、より一般的なバイト表現について非常に基本的な質問があります。バイナリで、例えば特定の単一バイトであろうように、バイトは、8ビットである:os.urandomとバイト表現
10011001
os.urandom(n)
は、暗号化の使用に適したランダムのnバイトの文字列を返します。私はちょうど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桁の16進数としてバイトを(両方とも代表されるようですもちろん2^8 = 16^2なので)。私の混乱は、上記のうちのいくつかだけが2桁の16進数で、「S」や「?」のような文字もあるということです。または '['。出力フォーマットとは何ですか? '[']のような出力をバイナリに変換するルールは何ですか?
ああ、わかりました。 ASCIIテーブルは127に拡張されているので、0から127の番号を付けたビットはASCII表現で表示され、残りのビットは16進数で表示されます。どうもありがとう! –
それはちょっと難しいですが、それは基本的な考えです。たとえば、バイト0〜31は「印刷可能」ではないため、16進エスケープとしても表示されます。 –