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 を使用して保存できます。