jni中byte[]和char*相互转换

时间:2025-02-08 14:18:51

Java对象中的byte数组参数转换为C可用的char数组

1、获取jclass引用和对象jobject引用,

2、根据参数名称获取jfieldID引用,

3、根据ID获取数组jbyteArray的引用

4、声明一个C 数组

5、将Java数组数据复制给C数组。

    id= (*env)->GetFieldID(env, objectClass, filedName, "[B");
    jbyteArray dataArray=(jbyteArray)((*env)-> GetObjectField(env,object,id));
    unsigned char* byteData[数据长度];
    (*env)->GetByteArrayRegion(env,dataArray,0,数据长度,byteData);

C的char指针类型数据转换为jbyteArray

1、根据指针数据的长度生成创建一个jbyteArray数组

2、进行赋值复制

3、使用数据,可以回调到Java中或者其他

4、删除本地引用,这个是局部引用,每次使用完之后都必须把类似的局部引用删除,

    char *pBuf ;
    jbyteArray data = (*jniEnv)->NewByteArray(jniEnv, length);
    (*jniEnv)->SetByteArrayRegion(jniEnv, data, 0, length, pBuf);
    (*jniEnv)->DeleteLocalRef(jniEnv, data);