脳ざらし紀行


2005-01-04

_ [Ruby] ランダムなバイト列

時々必要になりますが、ランダムなバイト列を生成するには、

[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 にしているからビット列としてのランダムネスがその分 落ちているし。

お名前:
E-mail:
コメント:
本日のリンク元

最近のコメント

2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|04|05|
2011|04|
2012|03|07|
2013|01|02|07|
トップ «前の日記(2005-01-03) 最新 次の日記(2005-01-05)» 編集