JNI学习5.jstring的处理

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可以将其保存。

猜你喜欢

转载自blog.csdn.net/m0_37872216/article/details/126662460