我需要在 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 字节数字
我需要在 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 字节长度数字”是稍微不正确且令人困惑的规范。您的意思是随机数均匀分布在 0 2^32-1 范围内(适合 4 个字节 - 无符号)?怎么样rnd.nextInt()
?
如果假设最高有效字节不等于 0,但其他字节呈线性分布,那么类似的东西应该可以工作:
Random rnd = new Random();
int result = (rnd.nextInt(0xFF) + 1) << 8*3;
result += rnd.nextInf(0x1000000);
如果该值可以采用任何数字,那么正如其他人指出的那样,存在 Random.nextBytes 或 Random.nextInt (但是,我对文档的理解是,它可以返回任何值,包括 0)。
这个号码的目的是什么?如果您生成密钥,那么通常第一位应该是 1(并且使用 SecureRandom) - 并且可能,除非您是世界级的密码学家,否则您不应该编写算法,而是使用(最好是高级)库。