转:JNI jstring与c++字符串类型转换函数
2017-12-28 14:59
204 查看
jstring与c++字符串类型转换函数
string到jstring
jstring到string
string到jstring
jstring str2jstring(JNIEnv* env,const char* pat) { //定义java String类 strClass jclass strClass = (env)->FindClass("Ljava/lang/String;"); //获取String(byte[],String)的构造器,用于将本地byte[]数组转换为一个新String jmethodID ctorID = (env)->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V"); //建立byte数组 jbyteArray bytes = (env)->NewByteArray(strlen(pat)); //将char* 转换为byte数组 (env)->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat); // 设置String, 保存语言类型,用于byte数组转换至String时的参数 jstring encoding = (env)->NewStringUTF("GB2312"); //将byte数组转换为java String,并输出 return (jstring)(env)->NewObject(strClass, ctorID, bytes, encoding); }
jstring到string
std::string jstring2str(JNIEnv* env, jstring jstr) { char* rtn = NULL; jclass clsstring = env->FindClass("java/lang/String"); jstring strencode = env->NewStringUTF("GB2312"); jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B"); jbyteArray barr= (jbyteArray)env->CallObjectMethod(jstr,mid,strencode); jsize alen = env->GetArrayLength(barr); jbyte* ba = env->GetByteArrayElements(barr,JNI_FALSE); if(alen > 0) { rtn = (char*)malloc(alen+1); memcpy(rtn,ba,alen); rtn[alen]=0; } env->ReleaseByteArrayElements(barr,ba,0); std::string stemp(rtn); free(rtn); return stemp; }
相关文章推荐
- 转:JNI jstring与c++字符串类型转换函数
- JNI jstring与c++字符串类型转换函数
- 转:JNI jstring与c++字符串类型转换函数
- 转:JNI jstring与c++字符串类型转换函数
- jstring与c++字符串类型转换函数
- jstring与c++字符串类型转换函数
- c++入门:输入一个字符串,将其分段输出,分段符为除字母和数字之外的符号。
- C++各大有名库的介绍——字符串
- 【c++基础】12.c++字符串操作
- c++字符串机理
- C++的字符串: C风格的字符串
- C/C++面试题(1)——字符串转换成整数
- C++字符串操作:String类
- C++基础---字符串(char型字符串)
- 菜鸟学Java之Java与C++在字符串中使用+和==的区别
- C++中字符串与整型浮点型间的转换(转载)
- C++怎么让函数返回固定长度字符串,比如给“zhangsan"返回原字符串加上4各空格,给“lisi"返回"lisi"加6
- C++搜索字符串中的汉字
- C++ hdoj 2017 字符串统计
- C++的字符串格式化库