【问题标题】:java- how to generate a 6 digit random hexadecimal valuejava-如何生成一个6位随机十六进制值
【发布时间】:2018-11-27 00:16:42
【问题描述】:

我在一个 Android 应用程序中有一个场景,其中必须生成一个随机的十六进制值,其中包含 6 位数字。 (取值范围可以是十六进制或整数值)。

最有效的方法是什么? 我是否必须生成一个随机的十进制数,然后将其转换为十六进制?要么 可以直接生成值吗?

【问题讨论】:

  • 数字就是数字。只需在需要的范围内生成它们,并在显示它们时进行转换。
  • this的可能重复
  • 6 位十六进制数为 3 个字节。 3 个字节是 0..16777215 整数。只需生成该范围内的整数,然后将其显示为十六进制。
  • 随机 rnd = new Random(); int n = rnd.nextInt(999999); Integer.valueOf(String.valueOf(n), 16);

标签: java android random


【解决方案1】:
SecureRandom random = new SecureRandom();
int num = random.nextInt(0x1000000);
String formatted = String.format("%06x", num); 
System.out.println(formatted);

代码解释

  1. 这个随机对象使用 SecureRandom 类方法。该类用于生成随机数。

    SecureRandom random = new SecureRandom();
    
  2. next int num object store 6 个十六进制数字随机数

    int num = random.nextInt(0x1000000);
    
  3. 然后将 num 输出为 6 位十六进制数

    String formatted = String.format("%06x", num); 
    

【讨论】:

  • 仅代码答案并没有真正的帮助。请解释代码,告诉我们为什么它会为所提问题提供解决方案。
  • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
【解决方案2】:
    String zeros = "000000";
    Random rnd = new Random();
    String s = Integer.toString(rnd.nextInt(0X1000000), 16);
    s = zeros.substring(s.length()) + s;
    System.out.println("s = " + s);

【讨论】:

  • 是的,你是对的。从 IDE 复制粘贴错误 :)
  • 另外,为了使它更有用和更完整,您应该在前面加上 0x 并将结果分配给一个字符串。锦上添花还将展示如何填充。
  • 使用String.format("%06x", rnd.nextInt(0x1000000)) 获得零填充。
  • @Andreas 方式更好。
  • 为了安全应用,我们可以使用 SecureRandom 类
【解决方案3】:

您可以像使用十进制文字一样在程序中使用十六进制文字。十六进制文字以 0x 为前缀。你的最大值是FFFFFF,所以在你的程序中你可以写

int maxValue = 0xFFFFFF;

然后你需要在那个范围内生成随机数。像往常一样使用Random 类。

Random r = new Random();
int myValue = r.nextInt(maxValue + 1);

注意maxValue + 1 的使用,因为nextInt() 的上限是独占的。

最后一步是打印出您的十六进制值。

System.out.printf("%06X", myValue);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    • 2015-10-07
    • 2011-12-29
    • 2010-11-06
    相关资源
    最近更新 更多