【问题标题】:Create random 4-byte number创建随机 4 字节数
【发布时间】:2013-05-22 09:48:12
【问题描述】:

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


【解决方案1】:

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

【讨论】:

    【解决方案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) - 并且可能,除非您是世界级的密码学家,否则您不应该编写算法,而是使用 (preferably high-level) 库。

    【讨论】:

    • 谢谢,看起来没问题,我只是需要时间来理解 24 点的转变 :)
    • @glaz666:我在指定范围时犯了一个小错误(随机不包括在内)。
    猜你喜欢
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    相关资源
    最近更新 更多