jstring str2jstring(JNIEnv* env1,std::string str){ char* pat = string2char(str); jclass strClass = env1->FindClass("java/lang/String"); jmethodID ctorID = env1->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V"); jbyteArray bytes = env1->NewByteArray((jsize)strlen(pat)); env1->SetByteArrayRegion(bytes, 0, (jsize)strlen(pat), (jbyte*)pat); jstring encoding = env1->NewStringUTF("utf-8"); return (jstring)env1->NewObject(strClass, ctorID, bytes, encoding);}
std::string jstring2str(JNIEnv* env1, jstring jstr) { char* rtn = NULL; jclass clsstring = env1->FindClass("java/lang/String"); jstring strencode = env1->NewStringUTF("GB2312"); jmethodID mid = env1->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B"); jbyteArray barr= (jbyteArray)env1->CallObjectMethod(jstr,mid,strencode); jsize alen = env1->GetArrayLength(barr); jbyte* ba = env1->GetByteArrayElements(barr,JNI_FALSE); if(alen > 0) { rtn = (char*)malloc(alen+1); memcpy(rtn,ba,alen); rtn[alen]=0; } env1->ReleaseByteArrayElements(barr,ba,0); std::string stemp(rtn); free(rtn); return stemp; }
char* string2char( std::string str) { std::string s1 = str; char *data; int len = s1.length(); data = (char *)malloc((len+1)*sizeof(char)); s1.copy(data,len,0); return data; }