【发布时间】:2012-12-13 01:54:26
【问题描述】:
我想将 int 数字格式化为十六进制字符串。 System.out.println(Integer.toHexString(1)); 打印 1 但我希望它为 0x00000001。我该怎么做?
【问题讨论】:
标签: java formatting
我想将 int 数字格式化为十六进制字符串。 System.out.println(Integer.toHexString(1)); 打印 1 但我希望它为 0x00000001。我该怎么做?
【问题讨论】:
标签: java formatting
试试这个
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”总是在开头,只需将该字符串添加到开头。
【讨论】:
有一个新的不可变类专门用于转换和格式化十六进制数字。最简单的方法是使用包含前导零的HexFormat::toHexDigits:
String hex = "0x" + HexFormat.of().toHexDigits(1);
// 0x00000001
注意,必须与 "0x" 前缀连接,因为这种方法会忽略已定义的前缀和后缀,因此以下 sn-p 无法按预期工作(仅 HexFormat::formatHex 方法有效和他们一起):
String hex = HexFormat.of().withPrefix("0x").toHexDigits(1);
// 00000001
返回 int 值的八个十六进制字符。从值的最高有效到最低有效的每个半字节
(4 bits)都被格式化为toLowHexDigit(nibble)。 不使用分隔符、前缀和后缀。
或者利用HexFormat::formatHex格式化为两个十六进制字符的优势,以及将StringBuilder作为包含Appendable前缀的Appendable:
每个字节值被格式化为前缀,两个十六进制字符从大写或小写数字中选择,以及后缀。
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 或 the printf method。
【讨论】:
不那么冗长:
System.out.printf("0x%08x", 1); //"Use %0X for upper case letters
【讨论】: