在把java中的String类型传入到c语言的方法时要进行转换
//此方法可能有点差异
char* Jstring2CStr(JNIEnv* env, jstring jstr){
char* rtn = NULL;
//获取String的class对象
jclass clsstring = (*env)->FindClass(env,"java/lang/String");
//得到一个java的字符串
jstring strencode = (*env)->NewStringUTF(env,"GB2312");
//获取要调用的方法ID 第2个参数:从哪个类中找第3个参数:方法名叫什么 第4个参数:方法的唯一签名
格式L表示object型前面是传入参数+返回参数
jmethodID mid = (*env)->GetMethodID(env,clsstring,"getBytes","(Ljava/lang/String;)[B");
//调用方法,把java中的字符串转变为java中的byte数组(String.getBytes("gb2312"))
jbyteArray barr= (jbyteArray)(*env)->CallObjectMethod(env,jstr,mid,strencode);
//获取byte数组的长度
jsize alen = (*env)->GetArrayLength(env,barr);
//获取byte数组中的每一个元素把它们放入到指定的ba的内存空间里
jbyte* ba = (*env)->GetByteArrayElements(env,barr,JNI_FALSE);
if(alen > 0)
{
rtn = (char*)malloc(alen+1);
//把ba内存中的内容copy到rtn申请的内存中
memcpy(rtn,ba,alen);
rtn[alen]=0;
}
//释放申请(ba)的内存
(*env)->ReleaseByteArrayElements(env,barr,ba,0);
return rtn;
}