版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/atian123kiss/article/details/80493781
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异常。