创建随机的4字节数字

时间:2013-05-27 13:58:16

标签: java

我需要在Java中生成随机的4字节长度数。

我来到这里:

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

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

其中0x1000000 - 是3字节值,根据JLS,int是4字节。

有没有更好的解决方案?

UPD:是的,“4字节长度”数字是指带有MSB(最高有效字节)的4字节数字

2 个答案:

答案 0 :(得分:2)

“4字节长度数字”略微不正确 - 令人困惑的规格。你的意思是一个随机数均匀分布在0 2 ^ 32-1(适合4个字节-unsigned)的范围内? rnd.nextInt()怎么样?

答案 1 :(得分:2)

如果最重要的字节假设不等于0但其他字符线性分布则应该有效:

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

如果值可以取任何数字,那么正如othes所指出的那样有Random.nextBytes或Random.nextInt(但我对文档的理解是,它可以返回任何值,包括0)。

这个号码的目的是什么?如果你生成密钥,那么通常第一位应该是1(并使用SecureRandom) - 除非你是世界级的密码学家,否则你不应该编写算法而是使用(preferably high-level)库。