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


你可能感兴趣的:(jni)