Как получить целое число без знака из байтового массива в JVM Kotlin? - PullRequest
0 голосов
/ 26 декабря 2018

Kotlin 1.3 представил целочисленные типы без знака , но я не могу понять, как получить целое число без знака из ByteArray в JVM Kotlin.

У Kotlin Native естьудобный ByteArray.getUIntAt() метод, но он не существует для JVM Kotlin.

val bytes: ByteArray = byteArrayOf(1, 1, 1, 1)
val uint: UInt // = ???

Какие у меня варианты здесь?Есть ли более элегантный способ, чем использовать ByteBuffer или немного изменить мой выход?

1 Ответ

0 голосов
/ 26 декабря 2018

Как уже упоминалось в комментариях, в версии JVM Kotlin нет готового решения.Функция расширения, выполняющая те же функции, что и функция Kotlin / Native, может выглядеть следующим образом:

fun ByteArray.getUIntAt(idx: Int) =
    ((this[idx].toUInt() and 0xFFu) shl 24) or
            ((this[idx + 1].toUInt() and 0xFFu) shl 16) or
            ((this[idx + 2].toUInt() and 0xFFu) shl 8) or
            (this[idx + 3].toUInt() and 0xFFu)

fun main(args: Array<String>) {

    // 16843009
    println(byteArrayOf(1, 1, 1, 1).getUIntAt(0))

    // 4294967295, which is UInt.MAX_VALUE
    println(byteArrayOf(-1, -1, -1, -1).getUIntAt(0))
}
...