jstring 和char* 之间的转换方法

原文:http://qdjinxin.iteye.com/blog/390973

//jstring to char* 
char* jstringTostring(JNIEnv* env, jstring jstr) 
{ 
       char* rtn = NULL; 
       jclass clsstring = env->FindClass("java/lang/String"); 
       jstring strencode = env->NewStringUTF("utf-8"); 
       jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B"); 
       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); 
                 memcpy(rtn, ba, alen); 
                 rtn[alen] = 0; 
       } 
       env->ReleaseByteArrayElements(barr, ba, 0); 
       return rtn; 
} 
//char* to jstring 
jstring stoJstring(JNIEnv* env, const char* pat) 
{ 
       //jclass strClass = env->FindClass("Ljava/lang/String;"); 
       jclass strClass = env->FindClass("java/lang/String"); 
       jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V"); 
       jbyteArray bytes = env->NewByteArray(strlen(pat)); 
       env->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat); 
       jstring encoding = env->NewStringUTF("utf-8"); 
       return (jstring)env->NewObject(strClass, ctorID, bytes, encoding); 
} 


注:

如果是c程序,要用 (*env)-> 

如果是C++要用 env->


例如:

C++中使用
env->FindClass("java/lang/String")


C中使用

(*env)->FindClass(env, "java/lang/String")



上一篇:php 数组Array 删除指定键名值


下一篇:Ant学习笔记