如何将表示无符号长整数的Long
/ ULong
转换为带有填充零(16位十六进制字符串)的无符号十六进制字符串?
我正在寻找Kotlin或Java的简单简洁的解决方案。
答案 0 :(得分:2)
val mutableList = listOf(121212L, 121212121212L,-1L)
mutableList.forEach {
println(it.toULong().toString(16).padStart(16, '0'))
}
它给出了
000000000001d97c
0000001c38ce307c
ffffffffffffffff
编辑:在注释中感谢Ilya,其中缺少toulong部分。
答案 1 :(得分:0)
我在x
中使用X
/ String.format()
找到了解决方案:
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
完全适用于无符号十六进制格式。