Kotlin 1.3引入了unsigned integer types,但我似乎无法弄清楚如何从Kotlin JVM中的ByteArray
获取无符号整数。
Kotlin本机具有便捷的ByteArray.getUIntAt()
方法,但是对于Kotlin JVM而言不存在。
val bytes: ByteArray = byteArrayOf(1, 1, 1, 1)
val uint: UInt // = ???
在这里我有什么选择?有没有比使用ByteBuffer
或从中移出方式更优雅的方式?
答案 0 :(得分:4)
如评论中所述,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))
}