如何将数字格式化为十六进制字符串?

38

我想将int数字格式化为十六进制字符串。System.out.println(Integer.toHexString(1)); 输出1,但我想要0x00000001。我该怎么做?


可能是重复的问题:如何在Java中从整数获取十六进制值 - durron597
9个回答

88

试试这个

System.out.println(String.format("0x%08X", 1));

1
这个方法可行,我们可以使用它来打印长达8字节的数字,例如:0xFFFFFFFF8DF6AE78。 - dotrinh PM

28
你可以使用String.format将整数格式化为十六进制字符串。
   System.out.println(String.format("0x%08X", 1));
也就是说,用零填充,并将总宽度设置为8。1会被自动转换成十六进制。上面的代码将输出:0x00000001
   System.out.println(String.format("0x%08X", 234));

输出:0x000000EA


7

根据Java的Formatter类的记录的格式化语法:

Integer intObject = Integer.valueOf(1);
String s = String.format("0x%08x", intObject);
System.out.println(s);

5
更简洁:
System.out.printf("0x%08x", 1); //"Use %0X for upper case letters

3

Java 17+

新增了一个专门用于转换和格式化十六进制数字的不可变类。最简单的方法是使用 HexFormat::toHexDigits,它包括前导零:

String hex = "0x" + HexFormat.of().toHexDigits(1);
// 0x00000001

注意,必须使用前缀"0x"连接,因为这种方法忽略定义的前缀和后缀,所以下面的代码片段不会按预期工作(只有HexFormat::formatHex方法可以与它们一起使用):
String hex = HexFormat.of().withPrefix("0x").toHexDigits(1);
// 00000001

将int值转换为8位十六进制字符。该值从最高有效位到最低有效位的每个半字节(4位)都被格式化,就像通过toLowHexDigit(nibble)一样。不使用分隔符、前缀或后缀。
或者,利用HexFormat::formatHex格式化为两位十六进制字符,并使用一个StringBuilder作为Appendable前缀,其中包含“0x”:
每个字节值都被格式化为前缀、两个十六进制字符(大写或小写数字)和后缀。
StringBuilder hex = HexFormat.of()
    .formatHex(new StringBuilder("0x"), new byte[] {0, 0, 0, 1});
// 0x00000001

StringBuilder hex = HexFormat.of()
    .formatHex(new StringBuilder("0x"), ByteBuffer.allocate(4).putInt(1).array());
// 0x00000001

很高兴了解Java-17中的这个新变化。它展示了Java已经如此强大地发展。 - Arvind Kumar Avinash

1

我对Java不是太熟悉,但肯定有一种方法可以使用'0'填充toHexString函数的输出到长度为8。如果“0x”始终位于开头,只需将该字符串附加到开头即可。


1
只需使用 "Integer.toString(n,x).toUpperCase()",其中 n=数字,x=进制。
Integer.toString(123,16).toUpperCase()  //7B

0

0

这是针对 Kotlin 的字符串扩展

//if lengthOfResultTextNeeded = 3 and input String is "AC", the result is = "0AC"
//if lengthOfResultTextNeeded = 4 and input String is "AC", the result is = "00AC"

fun String.unSignedHex(lengthOfResultTextNeeded: Int): String {
    val count =
        lengthOfResultTextNeeded - this.length 
    val buildHex4DigitString = StringBuilder()
    var i = 1
    while (i <= count) {
        buildHex4DigitString.append("0")
        ++i
    }
    return buildHex4DigitString.toString() + this
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接