如何在 JNI 中将 char* 转换为 jcharArray

And*_*son 5 c++ java java-native-interface android

如何在 JNI 中将 char* 转换为 jcharArray?

我必须在 // TODO 注释部分放入什么代码?

JNIEXPORT jcharArray JNICALL Java_finger_FingerPrintJNI_GetVer(JNIEnv *env, jobject thisObj){
    char* version = getText(); // Returns char* data type
    int version_len = strlen(version);

    jcharArray j_version_array = env->NewCharArray(version_len + 1);

    // TODO Convert char* to jcharArray

    return jcharArray;
}
Run Code Online (Sandbox Code Playgroud)

添加 ================================================== ======================

正如 Gearon 建议的那样,当我输入以下代码时,会引发错误。

jchar* jVersion = (jchar*)version;
env->SetCharArrayRegion(jcharArray, 0, version_len, jVersion);
Run Code Online (Sandbox Code Playgroud)

以下是错误信息。

JNIEnv_::SetCharArrayRegion(jcharArray,jsize,jsize,const jchar *)': cannot convert argument 1 from 'jchar *' to 'jcharArray'
sample.cpp(26): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Run Code Online (Sandbox Code Playgroud)

And*_*son 5

感谢 Gearon 建议我的最终代码是这样的。

jchar* j_version = (jchar*)calloc(sizeof(jchar), version_len);
for(int i=0; i <= version_len; i++){
    j_version[i] =  (jchar) version[i];
}

jcharArray j_version_array = env->NewCharArray(version_len + 1);
env->SetCharArrayRegion(j_version_array, 0, version_len , j_version);
Run Code Online (Sandbox Code Playgroud)


Eug*_*ene 4

您可以使用

jchar* jVersion = (jchar*)version;
env->SetCharArrayRegion(j_version_array, 0, version_len, jVersion);
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助你。谢谢