jstring与c++字符串类型转换函数

来源:互联网 发布:stc8单片机 编辑:程序博客网 时间:2024/05/29 07:51

jstring与c++字符串类型转换函数

原文: http://blog.csdn.net/b_xjie/article/details/6163847

[cpp] view plaincopy
  1. jstring str2jstring(JNIEnv* env,const char* pat)  
  2. {  
  3.     //定义java String类 strClass  
  4.     jclass strClass = (env)->FindClass("Ljava/lang/String;");  
  5.     //获取String(byte[],String)的构造器,用于将本地byte[]数组转换为一个新String  
  6.     jmethodID ctorID = (env)->GetMethodID(strClass, "<init>""([BLjava/lang/String;)V");  
  7.     //建立byte数组  
  8.     jbyteArray bytes = (env)->NewByteArray(strlen(pat));  
  9.     //将char* 转换为byte数组  
  10.     (env)->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat);  
  11.     // 设置String, 保存语言类型,用于byte数组转换至String时的参数  
  12.     jstring encoding = (env)->NewStringUTF("GB2312");   
  13.     //将byte数组转换为java String,并输出  
  14.     return (jstring)(env)->NewObject(strClass, ctorID, bytes, encoding);  
  15. }  
  16.   
  17.   
  18. std::string jstring2str(JNIEnv* env, jstring jstr)  
  19. {     
  20.     char*   rtn   =   NULL;     
  21.     jclass   clsstring   =   env->FindClass("java/lang/String");     
  22.     jstring   strencode   =   env->NewStringUTF("GB2312");     
  23.     jmethodID   mid   =   env->GetMethodID(clsstring,   "getBytes",   "(Ljava/lang/String;)[B");     
  24.     jbyteArray   barr=   (jbyteArray)env->CallObjectMethod(jstr,mid,strencode);     
  25.     jsize   alen   =   env->GetArrayLength(barr);     
  26.     jbyte*   ba   =   env->GetByteArrayElements(barr,JNI_FALSE);     
  27.     if(alen   >   0)     
  28.     {     
  29.         rtn   =   (char*)malloc(alen+1);           
  30.         memcpy(rtn,ba,alen);     
  31.         rtn[alen]=0;     
  32.     }     
  33.     env->ReleaseByteArrayElements(barr,ba,0);     
  34.     std::string stemp(rtn);  
  35.     free(rtn);  
  36.     return   stemp;     
  37. }     

原创粉丝点击