Convert char* to jstring in JNI, when char* is passed using va_arg

后端 未结 3 497
不思量自难忘°
不思量自难忘° 2020-12-06 17:23

Is it necessary to convert char* to jbyteArray, then call java String\'s contructor to generate a jstring? How else can it be done? Please help.

static in         


        
3条回答
  •  星月不相逢
    2020-12-06 17:47

    it is better to return byte[] to java rather than jstring due to the difference between UTF string in java and c string.it's much easier to deal encoding problem in java

    in java:

    byte[] otherString = nativeMethod("javastring".getBytes("UTF-8"))
    

    in c++:

    jbyte* javaStringByte = env->GetByteArrayElements(javaStringByteArray, NULL);
    jsize javaStringlen = env->GetArrayLength(javaStringByteArray);
    std::vector vjavaString;
    vjavaString.assign(javaStringByte , javaStringByte + tokenlen);
    std::string cString(vjavaString.begin(), vjavaString.end());
    //
    // do your stuff ..
    //
    jsize otherLen = otherCString.size();
    jbyteArray otherJavaString = env->NewByteArray(otherLen);
    env->SetByteArrayRegion(otherJavaString , 0, otherLen , (jbyte*) &otherJavaString [0]);
    
    env->ReleaseByteArrayElements(javaStringByteArray, javaStringByte , JNI_ABORT);
    return otherJavaString ;
    

    in java again:

    new String(otherString);
    

提交回复
热议问题