首页 > 解决方案 > android ndk - 将 jchar* 转换为 char*

问题描述

为什么将 jchar* 转换为 char* 时,c++ 在每个数组元素之间添加一个零?

爪哇:

public char[] mychar;
 .
 .
 
mychar = new char[3];

mychar[0] = 10;
mychar[1] = 20;
mychar[2] = 30;

c++:

Java_com_example_bb_mainact_getchar(JNIEnv *env, jobject thiz) {


    jclass cls = env->GetObjectClass(thiz);
    jfieldID fieldId = env->GetFieldID(cls, "mychar", "[C");
    jobject objArray = env->GetObjectField (thiz, fieldId);

    jcharArray* chArray = reinterpret_cast<jcharArray*>(&objArray);
    jchar *data = env->GetCharArrayElements(*chArray, 0);        
        
    LOGI( "data[0]: %d",  data[0]);  // --> 10
    LOGI( "data[1] : %d",  data[1]);  // --> 20
    LOGI( "data[2] : %d",  data[2]);  // --> 30

    char* data2 = reinterpret_cast<char *>(data);

    LOGI( "data2[0] : %d",  data2[0]);  // --> 10
    LOGI( "data2[1]: %d",  data2[1]);  // --> 0
    LOGI( "data2[2]: %d",  data2[2]);  // --> 20
         
     .

为什么从 jchar* 转换为 char* c++ 时会像这样制作数组?{10 , 0 , 20 , 0 , 30}

标签: javaandroidc++android-ndkjava-native-interface

解决方案


jchar是 16 位类型。char通常是 8 位类型。

您可以解决这个问题,例如,将data其视为指向一组 16 位元素的指针,或者在 Java 端使用 abyte[]而不是 a char[]


推荐阅读