NDK(14)Native的char*和Java的String相互轉換


  

  轉自: http://www.cnblogs.com/canphp/archive/2012/11/13/2768937.html

 1.前言

  首先確保C/C++源文件的字符編碼是UTF-8與JAVA的class文件字符編碼保持一致。如果C/C++源碼含有中文,那么編譯出來的so中的中文字符串也保存為UTF-8編碼,這樣的程序不會產生亂碼。

  JNI提供了jstring來引用JAVA的String類型變量,如果native函數需要返回 String或者接受String類型參數就必須使用到jstring。而C/C++用char*引用字符串起始地址,當native函數接到jstring后要轉換為char*所指向的字符串才能處理。當我們處理完char*所指向的字符串又要轉換為jstring才能返回給JAVA代碼。下面給出轉換的方法(下面均是C代碼)。

2.jstring轉換為char*

  使用JNIEnv的const char*  GetStringUTFChars(JNIEnv*, jstring, jboolean*)

  1 JNIEnv env=//傳入參數 ;  jstring name=//傳入參數 ;
  2 const char *nameStr=(*env)->GetStringUTFChars(env,name,NULL); 

  調用完GetStringUTFChars后必須調用JNIEnv的void ReleaseStringUTFChars(JNIEnv*, jstring, const char*)釋放新建的字符串。

  1 (*env)-> ReleaseStringUTFChars(env,name, nameStr);

3.char*轉換為jstring

  使用JNIEnv的jstring  NewStringUTF(JNIEnv*, const char*);

  1 jstring newArgName=(*env)->NewStringUTF(env, nameStr);

  調用完NewStringUTF后必須調用JNIEnv的void DeleteLocalRef(JNIEnv*, jobject);釋放新建的jstring。

  1 (*env)-> DeleteLocalRef(env, newArgName);

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM