我在应用程序中有一个场景,我需要生成一个ID,它应该是十六进制表示的随机64位值,
到目前为止我做了什么,
Random randomLong = new Random();
long m = randomLong.nextLong();
String uid = Long.toHexString(m);
o / p可能像 43c45c243f90326a 或 82cf8e3863102f3a 等。 但不是每次它给出16个字符,而是15个字符而不是我不明白为什么:(
以十六进制表示形式获取包含16个字符的随机64位值的最有效方法是什么
答案 0 :(得分:6)
使用String.format()
long value=123L;
String uid = String.format("%016x", value);
// 000000000000007b
一句解释:
每个十六进制数字代表4位。 64位长可以用16(64/4)个十六进制字符表示。要包含前导零,您需要16个十六进制数字。所以你的格式说明符是%016x
。基本上,%x
用于修改十六进制,方法是将016
插入左边的零填充,以实现最小宽度为16个字符。
答案 1 :(得分:1)
这是因为toHExString方法没有将前导零添加到你要转换的随机数,如果数字只能用一个字符表示为十六进制,那么你得到的就是一个字符
看到这个
String uid = Long.toHexString(-1L);
String uid2 = Long.toHexString(1L);
System.out.println(uid);
System.out.println(uid2);
输出
FFFFFFFFFFFFFFFF
1
-1将需要表示64位但是1不
编辑:
如果你总是需要16个半字节,那么格式化该字符串以添加缺失的零
String uid = String.format("%016x", Long.toHexString(1L));
答案 2 :(得分:0)