看来我不出手不行了……
两个方法:
#define CURRENT_ENCODE "GBK"jstring CharTojstring(JNIEnv* env, char* str)
{
jstring rtn = 0;
jsize len = strlen(str); jclass clsstring = env->FindClass("java/lang/String"); //new encode string default "GBK"
jstring strencode = env->NewStringUTF(CURRENT_ENCODE);
jmethodID mid = env->GetMethodID(clsstring, "<init>", "([BLjava/lang/String;)V");
jbyteArray barr = env->NewByteArray(len); env->SetByteArrayRegion(barr,0,len,(jbyte*)str); //call new String(byte[] b,String encode)
rtn = (jstring)env->NewObject(clsstring,mid,barr,strencode); return rtn;
}char* jstringToChar(JNIEnv* env, jstring jstr)
{
char* rtn = NULL;
jclass clsstring = env->FindClass("java/lang/String"); //new encode string default "GBK"
jstring strencode = env->NewStringUTF(CURRENT_ENCODE);
jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B"); //call String.getBytes method to avoid incompatible migrating into solaris
jbyteArray barr= (jbyteArray)env->CallObjectMethod(jstr,mid,strencode); jsize alen = env->GetArrayLength(barr);
jbyte* ba = env->GetByteArrayElements(barr,JNI_FALSE); if(alen > 0)
{
rtn = (char*)malloc(alen+1); //new char[alen+1];
memcpy(rtn,ba,alen);
rtn[alen]=0;
}
env->ReleaseByteArrayElements(barr,ba,0); return rtn;
}
两个方法:
#define CURRENT_ENCODE "GBK"jstring CharTojstring(JNIEnv* env, char* str)
{
jstring rtn = 0;
jsize len = strlen(str); jclass clsstring = env->FindClass("java/lang/String"); //new encode string default "GBK"
jstring strencode = env->NewStringUTF(CURRENT_ENCODE);
jmethodID mid = env->GetMethodID(clsstring, "<init>", "([BLjava/lang/String;)V");
jbyteArray barr = env->NewByteArray(len); env->SetByteArrayRegion(barr,0,len,(jbyte*)str); //call new String(byte[] b,String encode)
rtn = (jstring)env->NewObject(clsstring,mid,barr,strencode); return rtn;
}char* jstringToChar(JNIEnv* env, jstring jstr)
{
char* rtn = NULL;
jclass clsstring = env->FindClass("java/lang/String"); //new encode string default "GBK"
jstring strencode = env->NewStringUTF(CURRENT_ENCODE);
jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B"); //call String.getBytes method to avoid incompatible migrating into solaris
jbyteArray barr= (jbyteArray)env->CallObjectMethod(jstr,mid,strencode); jsize alen = env->GetArrayLength(barr);
jbyte* ba = env->GetByteArrayElements(barr,JNI_FALSE); if(alen > 0)
{
rtn = (char*)malloc(alen+1); //new char[alen+1];
memcpy(rtn,ba,alen);
rtn[alen]=0;
}
env->ReleaseByteArrayElements(barr,ba,0); return rtn;
}
char msg[255];
const char *msg1;
msg1 = jEnv->GetStringUTFChars(jString,msg);
谢了!