如何在 Kotlin 中对 IntArray 进行 Base64 编码

7

如何使用Kotlin将intArrayOf的缓冲区进行Base64编码。

val vec = intArrayOf(1,2,3,4,5)
val data =?!
val base64Encoded = Base64.encodeToString(data, Base64.DEFAULT);

你需要将int数组转换为可共享的编码/格式,例如JSON、yaml等。将本地数组(任何类型)转换为base64的想法是不合逻辑的。 - Avery
换句话说,我们如何获取它的二进制布局?同样的字节[]。 - ALMIStack
1
你不能直接获取二进制布局;你必须进行转换。但有不同的方法可以做到这一点——你需要什么?(如果所有值都是0-255(或-128-127),你可以将每个int转换为单个字节。否则,你将不得不转换成多个字节:4字节的整数,大端或小端;或者文本;或者你可以序列化数组对象;或...) - gidds
1个回答

4
“IntArray”的“ByteArray”表示可以按如下方式计算:
 fun IntArray.toByteArray(): ByteArray {

    val result = ByteArray(this.size * 4)

        for ((idx, value) in this.withIndex()) {
            result[idx + 3] = (value and 0xFF).toByte()
            result[idx + 2] = ((value ushr 8) and 0xFF).toByte()
            result[idx + 1] = ((value ushr 16) and 0xFF).toByte()
            result[idx] = ((value ushr 24) and 0xFF).toByte()
        }

        return result
    }

然后,可以像问题中提到的那样对此结果进行Base64编码:

val vec = intArrayOf(1,2,3,4,5)
val data = vec.toByteArray()
val base64Encoded = Base64.encodeToString(data, Base64.DEFAULT);

好的解决方案,但我发现使用IntBuffer可以轻松地将我的值放入并检索数组。 - ALMIStack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接