最近在做一个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);
}
分享到:
相关推荐
Android Studio3.0开发JNI流程,C++调用Java以及Java调用C++,C++/Java互相调用一个简单案例
JNI开发Java和C/C++互相传递List集合, 可以参考: Java从C/C++获取List集合对象:https://blog.csdn.net/niuba123456/article/details/80994166 Java传递List集合对象到C/C++ ...
C++库封装JNI接口-实现java调用c++
android jni 中文字符传递demo,实现了C语言与java端之间互相传递汉字的功能。例程开发环境为eclipse。详细说明,见相关博客。
android jni helloworld DEMO
Android-JNI完整工程,实现c调用java和java调用c
Android-ndk-jni AES加解密 压缩文件里面有 aes加解密 .c .h 文件 还用使用方法
Android JNI中C++层与Java层的对象交互实例代码详细介绍。Android JNI中C++层与Java层的对象交互实例代码详细介绍。Android JNI中C++层与Java层的对象交互实例代码详细介绍。Android JNI中C++层与Java层的对象交互...
最近项目中需要使用JNI,所以研究了一下,其中遇到过不少问题,总结一下,让遇到同样问题的人...在C/C++中调用Java的方法一般分为五个步骤:初始化虚拟机、获取类、获取类的方法、创建类对象、调用方法和退出虚拟机。
在VS2013中使用JNI进行JAVA和C++之间的互调,这两个文件只是项目中的一部分,仅供参考
安卓开发之串口通信android-serialport-api-master.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
JNI传递中文字符串资料
AndroidSerialPort ...涉及到的 jni 开发可以参考:【Android 应用开发】Android 开发 之 JNI入门 - NDK从入门到精通 jni 开发遇到的坑:https://github.com/jp1017/Android-Collection/issues/10
android-aes-jni, 用于 jni& Java的Android AES示例 android-aes-jni git clone https://github.com/panxw/android-aes-jni.git cd android-aes-jni ndk-build
Android开发书籍 - JNI详解_导航版
标签:github、luben、zstd、jni、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...
文档里描述了如何通过jni方法在java与c++代码之间传递非基本类型数据
标签:github、luben、zstd、jni、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...
android JNI开发演示(串口收发) ndk开发,串口收发,生产so库,有代码有开发说明文档,jni开发环境配合
Android JNI 断点调试C++,一个简单测试,方便初学者入门NDK环境搭建和java调用c++并调试