我想将int数字格式化为十六进制字符串。System.out.println(Integer.toHexString(1));
输出1
,但我想要0x00000001
。我该怎么做?
我想将int数字格式化为十六进制字符串。System.out.println(Integer.toHexString(1));
输出1
,但我想要0x00000001
。我该怎么做?
试试这个
System.out.println(String.format("0x%08X", 1));
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);
System.out.printf("0x%08x", 1); //"Use %0X for upper case letters
新增了一个专门用于转换和格式化十六进制数字的不可变类。最简单的方法是使用 HexFormat::toHexDigits
,它包括前导零:
String hex = "0x" + HexFormat.of().toHexDigits(1);
// 0x00000001
"0x"
连接,因为这种方法忽略定义的前缀和后缀,所以下面的代码片段不会按预期工作(只有HexFormat::formatHex
方法可以与它们一起使用):String hex = HexFormat.of().withPrefix("0x").toHexDigits(1);
// 00000001
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不是太熟悉,但肯定有一种方法可以使用'0'填充toHexString函数的输出到长度为8。如果“0x”始终位于开头,只需将该字符串附加到开头即可。
Integer.toString(123,16).toUpperCase() //7B
这是针对 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
}