将 Long/ULong 转换为带填充零的无符号十六进制字符串
Convert a Long/ULong to an unsigned hexadecimal string with padding zeros
如何将表示无符号长整数的 Long
/ULong
转换为带填充零的无符号十六进制字符串(16 位十六进制字符串)?
我正在寻找 Kotlin 或 Java 中的简单而巧妙的解决方案。
val mutableList = listOf(121212L, 121212121212L,-1L)
mutableList.forEach {
println(it.toULong().toString(16).padStart(16, '0'))
}
它给出
000000000001d97c
0000001c38ce307c
ffffffffffffffff
已编辑:在缺少 toULong 部分的评论中归功于 Ilya。
我在 String.format()
:
中使用 x
/X
找到了解决方案
fun Long.to16DigitUnsignedLowercaseHexString() =
"%016x".format(this)
fun Long.to16DigitUnsignedUppercaseHexString() =
"%016X".format(this)
我已经测试过它适用于边界值0L
、1L
、Long.MAX_VALUE
、-1L
和Long.MIN_VALUE
,所以应该没有问题。
java - How can I pad an integer with zeros on the left? - Stack Overflow 中提出了类似的问题。第一次看这个的时候,我没想到它会起作用,因为我认为 x
/X
是用于带符号的十六进制格式。原来我错了 x
/X
正是用于无符号十六进制格式。
如何将表示无符号长整数的 Long
/ULong
转换为带填充零的无符号十六进制字符串(16 位十六进制字符串)?
我正在寻找 Kotlin 或 Java 中的简单而巧妙的解决方案。
val mutableList = listOf(121212L, 121212121212L,-1L)
mutableList.forEach {
println(it.toULong().toString(16).padStart(16, '0'))
}
它给出
000000000001d97c
0000001c38ce307c
ffffffffffffffff
已编辑:在缺少 toULong 部分的评论中归功于 Ilya。
我在 String.format()
:
x
/X
找到了解决方案
fun Long.to16DigitUnsignedLowercaseHexString() =
"%016x".format(this)
fun Long.to16DigitUnsignedUppercaseHexString() =
"%016X".format(this)
我已经测试过它适用于边界值0L
、1L
、Long.MAX_VALUE
、-1L
和Long.MIN_VALUE
,所以应该没有问题。
java - How can I pad an integer with zeros on the left? - Stack Overflow 中提出了类似的问题。第一次看这个的时候,我没想到它会起作用,因为我认为 x
/X
是用于带符号的十六进制格式。原来我错了 x
/X
正是用于无符号十六进制格式。