時々必要になりますが、ランダムなバイト列を生成するには、
[rand(0x100000000)].pack('I*')
とか、
Array.new(10){ rand(0x100000000) }.pack('I*')
でしょうか。rand(0x100000000) で 0 から 0xffffffff までの整数を一様に出力するはず。それを pack で文字列に変換するとランダムなバイト列がえられます。ランダムな文字列が欲しい場合は、
a = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a Array.new(16){a[rand(a.size)]}.join #=> "zfn8n3Adwv2njdi9"
なんてのも。
それはそうと、random.c でせっかくメルセンヌツイスターがランダムなバイト列を生成しているのだから、それを直接使えた方が速いし良いなあと思う。一旦 double にしてからまた、unsigned long にしているからビット列としてのランダムネスがその分 落ちているし。
最近のコメント