Android JNI开发---java与c++之间的中文字符串传递
2011-07-14 16:11
453 查看
最近在做一个Android电子词典,其中在从词库中读取词条时,用到了jni---java调用c++;在java代码里调用本地方法时,难免会java与c++之间传递参数。传递的参数若是英文的话,比较好解决,网上一般都有解决方法,用着也没问题;但是在传递中文字符串时,就需要转换一下。下面就是我自己的传递方式:
1.C++ --> java
在C++中,解压出的词条是 jbyte* 类型的,有英文,有中文,所以,我就把这些数据以byteArray的形式给传递到java里面:
//功能:把解压出的词条放入数组中 //输入:plema 解压出的词条 //输入:i 词条索引 void ADDDictListItem(JNIEnv *env, jobject obj,jbyte *plema,int i) { jstring str; jbyteArray lem=env->NewByteArray(strlen((char*)plema)); env->SetByteArrayRegion(lem, 0,strlen((char*)plema), (jbyte*)plema); (env)->SetObjectArrayElement(args, i, lem); }
在java里面接收到 byte [] lems后,用创建一个新字符串的方式 String s=new String(lems,"GBK"),就可以得到那些传递过来的字符串。
2.java --> C++
在java向c++传递中文字符串的时候,我也是以后 byte[]的形式传递过去。先在java中把中文字符串转换成byte[]:
String str="阿姨";
byte []= str.getBytes("GBK");
在C++中:
//功能:接收从java传递过来的数组 //输入:lems java传递过来的数组 void searchZNInputLemmas(JNIEnv *env, jobject obj,jbyteArray lems) { jbyte * str; str =(jbyte *) (env)->GetByteArrayElements(lems, false); (env)->ReleaseByteArrayElements(lems, str, 0); }
相关文章推荐
- Java与C\C++之间通过JNI传递中文字符串
- Java与C之间通过JNI传递中文字符串
- Android java层与jni之间字符串数据传递需进行编码解码操作
- Java与C之间通过JNI传递中文字符串及乱码问题
- Java与C之间通过JNI传递中文字符串
- Android使用JNI实现Java与C之间传递数据
- Android使用JNI实现Java与C之间传递数据
- JAVA与C++::关于JNI中文字符串操作问题总结
- Android使用JNI实现Java与C之间传递数据
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- Android使用JNI实现Java与C之间传递数据
- Android Studio NDK 入门教程(2)--Java与C++之间的简单数据转换与传递
- JAVA与C++::关于JNI中文字符串操作问题总结
- Android使用JNI实现Java与C之间传递数据
- android(NDK+JNI)---Android使用JNI实现Java与C之间传递数据
- Java与C之间通过JNI传递中文字符乱码解决
- Android JNI/NDK开发(2)JNI实现C/C++与Android/JAVA相互调用
- Android第十三课 Java与C++之间基本数据传递
- Jni C/C++开发基础之基础聚集(Android、Java范畴)
- Android使用JNI实现Java与C之间传递数据 .