在java中,字符串的基本单位是两个字节(utf16),而c++中char(utf8)类型只占用一个字节,因此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类型的字符串,将该字符串赋值给需要返回的字符串即可。
此外需要ReleaseStringUTFChars对临时创建的char指针进行内存释放。
得到std::string类型之后就可以通过使用c++的函数传送该变量。但是需要注意,c语言本身不包含string类型,为了提高代码的通用性,可以将其转换为字符指针。
- 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可以将其保存。