我需要在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字节数字
答案 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)库。