31

我想将 int 数字格式化为十六进制字符串。 System.out.println(Integer.toHexString(1));打印1,但我希望它为0x00000001. 我怎么做?

4

7 回答 7

73

尝试这个

System.out.println(String.format("0x%08X", 1));
于 2012-12-13T02:01:37.153 回答
25

您可以使用 String.format 将整数格式化为十六进制字符串。

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

也就是说,用零填充,并使总宽度为 8。1 会为您转换为十六进制。上面的行给出:0x00000001

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

给出:0x000000EA

于 2012-12-13T02:01:13.920 回答
5

从 Java 的Formatter类中记录的格式化语法:

Integer intObject = Integer.valueOf(1);
String s = String.format("0x%08x", intObject);
System.out.println(s);
于 2012-12-13T02:02:04.117 回答
1

我不太了解 Java,但必须有一种方法可以将 toHexString 函数的输出用“0”填充到长度为 8。如果“0x”总是在开头,只需加上那个字符串到开头。

于 2012-12-13T02:04:59.737 回答
1

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
于 2021-10-05T16:46:59.270 回答
0

您可以在 PrintStream 上使用java.util.Formatterprintf 方法。

于 2012-12-13T02:01:27.107 回答
0

不那么冗长:

System.out.printf("0x%08x", 1); //"Use %0X for upper case letters
于 2021-07-15T20:50:44.647 回答