Преобразовать Long / ULong в шестнадцатеричную строку без знака с нулями заполнения - PullRequest
0 голосов
/ 31 мая 2019

Как преобразовать Long / ULong, представляющий длинную без знака, в шестнадцатеричную строку без знака с нулями (16-значная шестнадцатеричная строка)?

Я ищу простое и аккуратное решение на Kotlin или Java.

Ответы [ 2 ]

3 голосов
/ 31 мая 2019
val mutableList = listOf(121212L, 121212121212L,-1L)
mutableList.forEach {
    println(it.toULong().toString(16).padStart(16, '0'))
}

дает

000000000001d97c
0000001c38ce307c
ffffffffffffffff

Отредактировано: благодарю Илью в комментарии за отсутствующую длинную часть.

0 голосов
/ 01 июня 2019

Я нашел решение, используя 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 - Как я могу дополнить целое число нулями слева?- Переполнение стека .Глядя на это в первый раз, я не ожидал, что это сработает, потому что я думал, что x / X для шестнадцатеричного форматирования со знаком.Оказалось, что я ошибся, и x / X точно для шестнадцатеричного форматирования без знака.

...