jni中byte[]和char*相互轉換
阿新 • • 發佈:2018-11-11
id= (*env)->GetFieldID(env, objectClass, filedName, "[B");
jbyteArray dataArray=(jbyteArray)((*env)-> GetObjectField(env,object,id));
unsigned char* byteData[資料長度];
(*env)->GetByteArrayRegion(env,dataArray,0,資料長度,byteData);
以上程式碼是將一個Java物件中的byte陣列引數轉換為C可用的char陣列。
1、獲取jclass引用和物件jobject引用,
2、根據引數名稱獲取jfieldID引用,
3、根據ID獲取陣列jbyteArray的引用
4、宣告一個C 陣列
5、將Java陣列資料複製給C陣列。
未完待續。
char *pBuf
jbyteArray data = (*jniEnv)->NewByteArray(jniEnv, length);
(*jniEnv)->SetByteArrayRegion(jniEnv, data, 0, length, pBuf);
//使用資料
(*jniEnv)->DeleteLocalRef(jniEnv, data);以上程式碼是將一個C的char指標型別資料轉換為jbyteArray。
1、根據指標資料的長度生成建立一個jbyteArray陣列
2、進行賦值複製
3、使用資料,可以回撥到Java中或者其他
4、刪除本地引用,這個是區域性引用,每次使用完之後都必須把類似的區域性引用刪除,
否則多次執行後會報區域性引用超過512異常。