Android JNI开发---java与c++之间的中文字符串传递

   最近在做一个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); 
}

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值