星空网 > 软件开发 > 操作系统

Android java传递string类型数据给C

本文接着实现《Android java传递int类型数据给C》的还未实现的方法:

public native String sayHelloInC(String s);

先贴一个工具方法,具体意义后面的文章将介绍

/** * 把一个jstring转换成一个c语言的char* 类型. */char* _JString2CStr(JNIEnv* env, jstring jstr) {  char* rtn = NULL;  jclass clsstring = (*env)->FindClass(env, "java/lang/String");  jstring strencode = (*env)->NewStringUTF(env, "GB2312");  jmethodID mid = (*env)->GetMethodID(env, clsstring, "getBytes",      "(Ljava/lang/String;)[B");  jbyteArray barr = (jbyteArray) (*env)->CallObjectMethod(env, jstr, mid,      strencode); // String .getByte("GB2312");  jsize alen = (*env)->GetArrayLength(env, barr);  jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE);  if (alen > 0) {    rtn = (char*) malloc(alen + 1); //"\0"    memcpy(rtn, ba, alen);    rtn[alen] = 0;  }  (*env)->ReleaseByteArrayElements(env, barr, ba, 0);  return rtn;}

接着完成sayHelloInC函数

/* * Class:   com_wuyudong_javapassdata_JNI * Method:  sayHelloInC * Signature: (Ljava/lang/String;)Ljava/lang/String; */
JNIEXPORT jstring JNICALL Java_com_wuyudong_javapassdata_JNI_sayHelloInC( JNIEnv * env, jobject clazz, jstring jstr) { //调用工具方法把java中的string类型转换成C语言中的char× char* cstr = _JString2CStr(env, jstr); int len = strlen(cstr); int i; for (i = 0; i < len; i++) { *(cstr + i) += 1; } return (*env)->NewStringUTF(env, cstr);}

搞定,运行项目




原标题:Android java传递string类型数据给C

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

圣诞节要变圣诞“劫”?又有产品被亚马逊下架!:https://www.ikjzd.com/articles/111992
紧急避雷!亚马逊更新的这些雷区不要再踩!:https://www.ikjzd.com/articles/111993
亚马逊新卖家选品,这几点一定要注意!:https://www.ikjzd.com/articles/111996
选品指南:家居品类10大热卖产品盘点!:https://www.ikjzd.com/articles/111999
亚马逊怎么样安全高效获得Review:https://www.ikjzd.com/articles/112
注意!Wish正在积极收集巴西用户的CPF信息!:https://www.ikjzd.com/articles/112000
在古巴做游轮 古巴旅游项目:https://www.vstour.cn/a/363194.html
西藏旅游攻略自驾游需要多少天 去西藏旅游自驾游要多久时间:https://www.vstour.cn/a/363195.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流