rtn:字符指针变量,指向一个堆内存空间
clsstring:java.lang.String的字节码
strencode:java字符串,值是GB2312
mid:String的getByte方法,参数是一个字符串
barr:要转换的java字符串的字节数组
alen:barr的长度
ba:barr的首地址
char* Jstring2CStr(JNIEnv* env, jstring jstr) {
char* rtn = NULL; //原来是char* rtn = NULL;
jclass clsstring = (*env)->FindClass(env, "java/lang/String");
jstring strencode = (*env)->NewStringUTF(env, "GB2312");
jmethodID mid = (*env)->GetMethodID(env, clsstring, "getBytes",
"(Ljava/lang/String;)[B");
jbyteArray barr = (jbyteArray) (*env)->CallObjectMethod(env, jstr, mid,
strencode); // String .getByte("GB2312");
jsize alen = (*env)->GetArrayLength(env, barr);
jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE);
if (alen > 0) {
rtn = (char*) malloc(alen + 1); //"\0"
memcpy(rtn, ba, alen);
rtn[alen] = 0;
}
(*env)->ReleaseByteArrayElements(env, barr, ba, 0); //
return rtn;
}