/*
将 String 类型转成 char*
*/
char* Jstring2CStr(JNIEnv* env, jstring jstr)
{
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);
jsize alen = (*env)
->GetArrayLength(env,barr);
jbyte* ba = (*env)
->GetByteArrayElements(env,barr,JNI_FALSE);
if(alen >
0)
{
rtn = (
char*)malloc(alen+
1);
//new char[alen+1];
memcpy(rtn,ba,alen);
rtn[alen]=
0;
}
(*env)
->ReleaseByteArrayElements(env,barr,ba,
0);
return rtn;
}
/**
将char* 转成 其他类型
*/
jstring CStr2Jstring( JNIEnv* env,
const char* pat )
{
//定义java String类 strClass
jclass strClass = (*env)
->FindClass(env,
"Ljava/lang/String;");
//获取java String类方法String(byte[],String)的构造器,用于将本地byte[]数组转换为一个新String
jmethodID ctorID = (*env)
->GetMethodID(env,strClass,
"<init>",
"([BLjava/lang/String;)V");
//建立byte数组
jbyteArray bytes = (*env)
->NewByteArray(env,(jsize)strlen(pat));
//将char* 转换为byte数组
(*env)
->SetByteArrayRegion(env,bytes,
0, (jsize)strlen(pat), (jbyte*)pat);
//设置String, 保存语言类型,用于byte数组转换至String时的参数
jstring encoding = (*env)
->NewStringUTF(env,
"GB2312");
//将byte数组转换为java String,并输出
return (jstring)(*env)
->NewObject(env,strClass, ctorID, bytes, encoding);
}