2

我需要在 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 字节数字

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 回答