JNI学習 5.jstring処理

jsting から std::string への変換

Java では文字列の基本単位は 2 バイト (utf16) ですが、C++ の char (utf8) 型は 1 バイトしか占有しないため、jstring を std::string に変換するには追加の処理が必要です。

std::string jstring2string(JNIEnv *env, jstring jStr){
    const char *cstr = env->GetStringUTFChars(jStr, NULL);
    std::string str = std::string(cstr);
    env->ReleaseStringUTFChars(jStr, str);
    return str;
}

コード内の GetStringUTFChars は、変更された utf8 型の文字列を取得できます。返される文字列に文字列を割り当てるだけです。

また、一時的に作成したcharポインタのメモリを解放するためにReleaseStringUTFCharsが必要です。

std::string 転送テクニック

std::string 型を取得したら、C++ の関数を使用して変数を渡すことができます。ただし、C 言語自体には文字列型が含まれていないため、コードの汎用性を高めるために、文字ポインタに変換することができます。

char *cstr;
string str ("it is std::string type");
cstr = new char [str.size()+1];
strcpy (cstr, str.c_str());

c_str() によって const char * 変数を返すことができ、これは strcpy を使用して保存できます。

おすすめ

転載: blog.csdn.net/m0_37872216/article/details/126662460