【问题标题】:Long to hex String number of characters长到十六进制字符串字符数
【发布时间】:2016-05-22 00:37:32
【问题描述】:

嗨,我正在尝试构建一个随机的 16 个字符的十六进制,为此我尝试了 Long.toHexString(new Random().nextLong() 我的假设是它总是会返回一个 16 个字符的字符串,对吗? (一旦返回 15 个字符)

【问题讨论】:

  • 你应该阅读 Long.toHexString 的 Javadoc 以了解它返回的内容
  • 请注意 Random.nextLong() according to the documentation 不会在所有可能的 long 值的范围内生成随机 long,这意味着您不可能通过这种方式获得十六进制字符串的所有可能组合。这对您来说可能是也可能不是问题,但值得注意。
  • 这与我所询问的机制无关,这里随机的值并不重要,但分配给它的空间;)

标签: java hex long-integer


【解决方案1】:

参考Javadoc of the method in question 应该是您的第一个停靠港:

此值被转换为十六进制(基数为 16)的 ASCII 数字字符串,没有额外的前导 0

所以不,它不会总是 16 个字符。

但是,您可以使用以下方法打印 16 字符的大写十六进制字符串,前导零:

String.format("%016X", longValue)

【讨论】:

    【解决方案2】:

    查看 toHexString(long i) 的 javadocs(重点是我的)。

    public static String toHexString(long i)

    返回一个字符串 将 long 参数表示为以 16 为底的无符号整数。

    unsigned long 值是参数加上 264 如果参数是 消极的;否则,它等于参数。这个值是 转换为十六进制 (base 16) 的 ASCII 数字字符串,没有 额外的前导 0。如果无符号幅度为零,则表示 通过单个零字符'0'('\u0030');否则,第一个 无符号幅度的表示的字符将不会 零字符。

    事实证明,它不会总是为 16 个字符长。但是,如果您愿意,可以用零填充:

    import java.util.Random;
    
    class Main {
        public static void main(String[] args) {
            String hex16Chars = String.format("%016X", new Random().nextLong());
            System.out.println(hex16Chars + ", len: " + hex16Chars.length());
        }
    }
    

    您将看到长度始终如预期的那样为 16。

    事实证明,偷看文档确实有帮助! :)

    【讨论】:

      猜你喜欢
      • 2010-10-04
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      相关资源
      最近更新 更多