1. 程式人生 > >jni中byte[]和char*相互轉換

jni中byte[]和char*相互轉換

    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異常。