[英]Byte array with padding of null bytes at the end: how to efficiently copy to smaller byte array
[英]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.