我有在Java byte[]
,其報告其爲256個字節,其餘傳遞給一個本機函數中C.問題通過字節[]通過JNI至C在Android
當我試圖讓出的數據長度這個數組是完全錯誤的,當我將它打印出來時,它與我在將它傳遞給C之前打印出的數據不匹配。
我嘗試了幾種方法來訪問數據,包括GetByteArrayRegion
和GetByteArrayElements
,但沒有任何東西給我我期望的數據。
正如我在研究這個,我試着看看JNI認爲jbyteArray
的長度是GetArrayLength
- 它報告的長度爲1079142960,遠遠超過我預期的256個字節。也值了每個函數被調用的時間是不同的,例如另一個時間GetArrayLength
返回1079145720.
這裏是我用來訪問數組的代碼:
JNIEXPORT jbyteArray function(JNIEnv* env, jbyteArray array) {
int length = (*env)->GetArrayLength(env, array);
jbyte data[256];
(*env)->GetByteArrayRegion(env, array, 0, 256, data);
//also tried
//jbyte *data = (jbyte*) (*env)->GetByteArrayElements(env, array, NULL);
}
這似乎很直接,所以我我不確定發生了什麼事。這個數組在Java中看起來很好,但是它是在C中生成的,並且傳回來了,所以我認爲可能出現了錯誤,因爲Java不關心它,但是當它返回到C時會中斷陣列。
這裏是代碼我用來生成數組並將其傳回給Java:
//there is some openSSL stuff here that sets up a pointer to an RSA struct called keys that is size bytes large
jbyteArray result = (*env)->NewByteArray(env, size);
(*env)->SetByteArrayRegion(env, result, 0, size, (jbyte*)keys;
我是否錯過了某些東西?
謝謝
Java代碼是怎樣的? –
Java中沒有什麼有趣的事情我從SharedPreferences對象中獲取字節數組,然後檢查數據和長度,這兩個數據看起來都不錯,然後將它傳遞給本機函數 –