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