我想将 int 数字格式化为十六进制字符串。 System.out.println(Integer.toHexString(1));
打印1
,但我希望它为0x00000001
. 我怎么做?
7 回答
尝试这个
System.out.println(String.format("0x%08X", 1));
您可以使用 String.format 将整数格式化为十六进制字符串。
System.out.println(String.format("0x%08X", 1));
也就是说,用零填充,并使总宽度为 8。1 会为您转换为十六进制。上面的行给出:0x00000001
和
System.out.println(String.format("0x%08X", 234));
给出:0x000000EA
从 Java 的Formatter类中记录的格式化语法:
Integer intObject = Integer.valueOf(1);
String s = String.format("0x%08x", intObject);
System.out.println(s);
我不太了解 Java,但必须有一种方法可以将 toHexString 函数的输出用“0”填充到长度为 8。如果“0x”总是在开头,只需加上那个字符串到开头。
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 值的八个十六进制字符。值的从最高有效到最低有效的每个半字节
(4 bits)
都被格式化为toLowHexDigit(nibble)
. 不使用分隔符、前缀和后缀。
或者使用HexFormat::formatHex
格式化为两个十六进制字符的优势,并将 aStringBuilder
作为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
您可以在 PrintStream 上使用java.util.Formatter或printf 方法。
不那么冗长:
System.out.printf("0x%08x", 1); //"Use %0X for upper case letters