繁体   English   中英

如何将 JSONArray 中的字节复制到字节数组

[英]How to copy bytes in JSONArray to Byte array

我正在以缓冲区(字节)的形式获取图像数据,但我想将其转换为 base64 字符串。 数据在 JSONArray 中接收,就像这样

JSONArray : `[53,57,51,47,53,57,51,55,50,98,98,54,53,51,54,97,102,101,53,101,102,54,57,54,53,54,53,51,102,98,53,99,98,98,99,51,98,48,52,57,56,52,52,101,54,48,50,99,56,55,101,54,53,97,51,102,56,49,56,57,56,98,102,56,49,57,97,57]`

为此,我将 JSONArray 复制到"byte" array中,如下所示:

JSONArray bytearray_json = record.getJSONObject("image").getJSONArray("data");
byte[] bytes = new byte[bytearray_json.length()];
for (int i =0; i < bytearray_json.length(); i++ ) {
    bytes[i] = (byte)bytearray_json.get(i);
}
String base_64 = Base64.encodeToString(bytes,Base64.DEFAULT);

但我得到一个例外: Cannot cast Integer to byte I cannot do bytearray_json.get(i).toString().getBytes(); 因为它返回一个Byte Array

我该如何解决这个问题?

你可以试试这个,

JSONArray jsonArray = response.getJSONObject("image").getJSONArray("data");
byte[] bytes = new byte[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++) {
        bytes[i]=(byte)(((int)jsonArray.get(i)) & 0xFF);
}
 Base64.encodeToString(bytes, Base64.DEFAULT);

感谢@Hasangi 的回答。

对于那些想要使用基于 Kotlin 的更现代答案的人:

fun JSONArray.toByteArray(): ByteArray {
    val byteArr = ByteArray(length())
    for (i in 0 until length()) {
        byteArr[i] = (get(i) as Int and 0xFF).toByte()
    }
    return byteArr
}

并使用:

val bytes = jsonObj.getJSONArray("bytes").toByteArray()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM