你好,我想要构建一个随机的16位十六进制字符串,我尝试使用Long.toHexString(new Random().nextLong()
来实现,我的假设是它总是会返回一个16位的字符串,我是对的吗?(有时会返回15位)
你好,我想要构建一个随机的16位十六进制字符串,我尝试使用Long.toHexString(new Random().nextLong()
来实现,我的假设是它总是会返回一个16位的字符串,我是对的吗?(有时会返回15位)
首先,参考所涉及方法的Javadoc是您的第一选择:
此值将转换为十六进制(基数16)的ASCII数字字符串,没有额外的前导0。
因此,并不总是16个字符长度。
但是,您可以使用以下代码打印一个带有前导零的16个字符的大写十六进制字符串:
String.format("%016X", longValue)
请查看toHexString(long i)
的javadocs(强调我的)。
public static String toHexString(long i)
以十六进制(基数为16)无符号整数形式返回一个long类型参数的字符串表示形式。
如果参数为负,则无符号长整型值为该参数加2的64次方;否则,它等于该参数本身。将该值转换为十六进制(基数为16)的ASCII数字字符串时不需要额外的前导零。如果无符号幅值为零,则由单个零字符'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。
而且事实证明偷看文档确实有帮助! :)
Long.toHexString
的 Javadoc 以了解它返回的内容。 - wero