将 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)

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

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