android 在Kotlin中将Int,Short,UInt等转换为字节或字节数组

erhoui1w  于 2023-04-18  发布在  Android
关注(0)|答案(3)|浏览(1055)

我在Android的Kotlin项目中使用java nio ByteBuffer,我需要将所有原始类型转换为字节,以便将它们放入ByteBuffer中,特别是Unsigned类型,因为java nio不支持Unsigned类型,如UInt,UShort等。

1bqhqjot

1bqhqjot1#

下面是一个UInt的例子,你可以对其他类型做同样的工作:

internal fun UInt.to4ByteArrayInBigEndian(): ByteArray =
    (3 downTo 0).map {
        (this shr (it * Byte.SIZE_BITS)).toByte()
    }.toByteArray()
rlcwz9us

rlcwz9us2#

ByteBuffer支持putInt()、putLong()等,因此可以调用buf.putInt(unsignedInt.toInt())。或者使用https://github.com/mvysny/kotlin-unsigned-jvm

omqzjyyz

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

注:我在这里只使用了整数,但也有其他数据类型的扩展函数。

相关问题