长到十六进制字符串数字

时间:2016-02-11 09:53:40

标签: java hex long-integer

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

2 个答案:

答案 0 :(得分:7)

查看toHexString(long i)的javadoc(强调我的)。

  

<强> public static String toHexString(long i)

     

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

     

如果参数是,则无符号long值是参数加上2 64   负;否则,它等于参数。这个值是   转换为十六进制的ASCII数字字符串(基数16)没有   额外领先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。

而且事实证明,偷看文档实际上有帮助! :)

答案 1 :(得分:5)

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

  

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

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

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

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