将Long / ULong转换为带有填充零的无符号十六进制字符串

时间:2019-05-31 02:56:02

标签: java kotlin formatting number-formatting long-integer

如何将表示无符号长整数的Long / ULong转换为带有填充零(16位十六进制字符串)的无符号十六进制字符串?

我正在寻找Kotlin或Java的简单简洁的解决方案。

2 个答案:

答案 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)

我已经测试了它适用于边界值0L1LLong.MAX_VALUE-1LLong.MIN_VALUE,因此应该没有问题。

java - How can I pad an integer with zeros on the left? - Stack Overflow中提出了类似的问题。第一次查看时,我没想到它会起作用,因为我认为x / X是用于带符号的十六进制格式的。原来我错了,x / X完全适用于无符号十六进制格式。