jsting到std::string的转换
在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的传送技巧
得到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可以将其保存。