我在Android的Kotlin项目中使用java nio ByteBuffer,我需要将所有原始类型转换为字节,以便将它们放入ByteBuffer中,特别是Unsigned类型,因为java nio不支持Unsigned类型,如UInt,UShort等。
1bqhqjot1#
下面是一个UInt的例子,你可以对其他类型做同样的工作:
internal fun UInt.to4ByteArrayInBigEndian(): ByteArray = (3 downTo 0).map { (this shr (it * Byte.SIZE_BITS)).toByte() }.toByteArray()
rlcwz9us2#
ByteBuffer支持putInt()、putLong()等,因此可以调用buf.putInt(unsignedInt.toInt())。或者使用https://github.com/mvysny/kotlin-unsigned-jvm
buf.putInt(unsignedInt.toInt())
omqzjyyz3#
在Kotlin中,您可以尝试以下扩展函数:
println(12.toUInt()) println((-12).toUInt()) println(12.toUInt().toByte()) println((-12).toUInt().toByte())
输出:
I/System.out: 12 I/System.out: 4294967284 I/System.out: 12 I/System.out: -12
注:我在这里只使用了整数,但也有其他数据类型的扩展函数。
3条答案
按热度按时间1bqhqjot1#
下面是一个UInt的例子,你可以对其他类型做同样的工作:
rlcwz9us2#
ByteBuffer支持putInt()、putLong()等,因此可以调用
buf.putInt(unsignedInt.toInt())
。或者使用https://github.com/mvysny/kotlin-unsigned-jvmomqzjyyz3#
在Kotlin中,您可以尝试以下扩展函数:
输出:
注:我在这里只使用了整数,但也有其他数据类型的扩展函数。