2

Java でランダムな 4 バイト長の数値を生成する必要があります。

私はこれに来ました:

Random rnd = new Random();
int i = 0;

while((i=rnd.nextInt()) < 0x1000000){}
return i;

ここで、0x1000000 - は 3 バイトの値で、int は JLS によると 4 バイトです。

より良い解決策はありますか?

UPD: はい、「4 バイト長」の数値とは、MSB (最上位バイト) を含む 4 バイトの数値を意味します

4

2 に答える 2

3

「4 バイトの長さの数値」は、やや不正確で紛らわしい仕様です。0 2^32-1 (符号なしの 4 バイトに収まる) の範囲で一様に分布する乱数を意味しますか? どうrnd.nextInt()ですか?

于 2013-05-27T14:05:39.060 に答える
2

最上位バイトが 0 ではなく、他のバイトが線形に分布していると想定される場合、次のようなものが機能するはずです。

 Random rnd = new Random();
 int result = (rnd.nextInt(0xFF) + 1) << 8*3;
 result += rnd.nextInf(0x1000000);

値が任意の数値を取ることができる場合、他の人が指摘したように、 Random.nextBytes または Random.nextInt があります(ただし、ドキュメントに関する私の理解では、0を含む任意の値を返すことができます)。

この番号の目的は何ですか? キーを生成する場合、通常、最初のビットは 1 (および SecureRandom を使用) にする必要があります。おそらく、世界クラスの暗号作成者でない限り、アルゴリズムを作成するのではなく、(できれば高レベルの) ライブラリを使用する必要があります。

于 2013-05-27T14:07:02.457 に答える