rubyのSecureRandom.random_bytesの説明を見ていたのですが、以下の内容が分かりませんでした。
SecureRandom.random_bytes generates a random binary string.
The argument n specifies the length of the result string.
If n is not specified or is nil, 16 is assumed. It may be larger in future.
The result may contain any byte: “\x00” - “\xff”.
p SecureRandom.random_bytes #=> "\xD8\xE0\xF4\r\xB2\xFC*WM\xFF\x83\x18\xF45\xB6"
p SecureRandom.random_bytes #=> "m\xDC\xFC/\a\x00Uf\xB2\xB2P\xBD\xFF6S\x97"
太字部分を見ると、1バイトの並びが続く文字列が出力されるようにも見えたのですが、
実際の結果は純粋な\x00の並びではなく、ところどころ文字が挟まっているように見えます。
"バイナリデータだから文字列にすると変な形になる"とすると、太字の説明はなにを表しているのでしょうか。
合わせて、別の質問もさせてください。
random_bytesについて、web上のリファレンスを見ると出力結果が異なっていました。
https://docs.ruby-lang.org/ja/latest/class/SecureRandom.html
random binary string.
require 'securerandom'
p SecureRandom.random_bytes(10) #=> "\016\t{\370g\310pbr\301"
p SecureRandom.random_bytes(10) #=> "\323U\030TO\234\357\020\a\337"
こちらは8進数の並びが微妙に続いているように見えますが、自分のirb上では以下のように出力形式が16進数の並びっぽくなります。
この出力形式の違いはどこから来るのでしょうか。
Ruby version: 3.0.2
irb(main):001:0> require 'securerandom'
=> true
irb(main):002:0> p SecureRandom.random_bytes(10)
"\xF8\x8A\x1AG:\x1C\x15\x12\x03("
=> "\xF8\x8A\x1AG:\x1C\x15\x12\x03("
irb(main):003:0> p SecureRandom.random_bytes(10)
"\x9D\x80\xBE\x97\xF2f9g\xFC\xDF"
=> "\x9D\x80\xBE\x97\xF2f9g\xFC\xDF"
回答2件
あなたの回答
tips
プレビュー