长到十六进制字符串数字

use*_*362 0 java hex long-integer

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

Sна*_*ƒаӽ 8

看一下javadocs toHexString(long i)(强调我的).

public static String toHexString(long i)

返回long参数的字符串表示形式,作为基数为16的无符号整数.

如果参数为负,则unsigned long值为参数加2 64 ; 否则,它等于参数.该值转换为十六进制(基数为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());
    }
}
Run Code Online (Sandbox Code Playgroud)

你会看到长度总是如预期的那样是16.

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


And*_*ner 6

提到有问题的方法的Javadoc应该是你的第一个停靠点:

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

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

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

String.format("%016X", longValue)
Run Code Online (Sandbox Code Playgroud)