当前位置: 首页 > news >正文

网站建设类论文爱站关键词搜索

网站建设类论文,爱站关键词搜索,免费的空间网站,wordpress 只显示列表目录 0 前言 1 string类型参数形式传值 2 测试和结果 0 前言 类似之前我写过的两篇文章:一篇介绍了在JNI中基础类型int的传值方式;一篇详细梳理了在JNI层中多维数组的多种传值方式。 JNI内两种方式从C/C中传递一维、二维、三维数组数据至Java层详细…

目录

0  前言

1 string类型参数形式传值

2 测试和结果


0  前言

        类似之前我写过的两篇文章:一篇介绍了在JNI中基础类型int的传值方式;一篇详细梳理了在JNI层中多维数组的多种传值方式。

JNI内两种方式从C/C++中传递一维、二维、三维数组数据至Java层详细梳理_nanke_yh的博客-CSDN博客

JNI内形参从C代码中获取返回值并返回到Java层使用-CSDN博客

        这篇则主要是讲JNI中String类型的数据如何通过参数的形式传递数据值。

1 string类型参数形式传值

        对于JNI层传递string类型数据的网络检索,出现的并不多。大多都是讲通过return方式进行内容传递的,大家大可参考:JNI String类型 - 知乎 (zhihu.com),内部有相关理论介绍可以了解。

        通过参数形式传递string类型数据具体借鉴了下文:JNI 通过形参String返回数据的方法_jni string 参数返回_Cosmo_Wang1989的博客-CSDN博客

本文具体的其实也是将string传递成StringBuffer类型,即以StringBuffer作为参数传入获取内部string数据。如此在c/c++中就有了以下的实现代码:(具体的分析解释看代码中的注释)

//最终实际传出的数据类型为StringBuffer
JNIEXPORT jint Java_com_test_java_JNItest_testString(JNIEnv *env, jobject, jobject result)
{string  sstr = "Hello world!"; //str.c_str()转成const char*const char* str = sstr.c_str();//jstring的类型jclass strClass = (env)->FindClass("Ljava/lang/String;");//methodIDjmethodID ctorID = (env)->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");//通过字符数组存储字符串 jbyteArray bytes = (env)->NewByteArray(strlen(str));(env)->SetByteArrayRegion(bytes, 0, strlen(str), (jbyte*)str);//规定字符为UTF-8jstring encoding = (env)->NewStringUTF("UTF-8"); //得到jstring类型的数据   //若采用return方式传出的话,则可以直接返回temp。jstring temp=(jstring)(env)->NewObject(strClass, ctorID, bytes, encoding);//获取需要传出去result参数类型jclass outputJcls = env->GetObjectClass(result);//根据result数据类型获取append操作的methodIDjmethodID appendJmId = env->GetMethodID(outputJcls, "append", "(Ljava/lang/String;)Ljava/lang/StringBuffer;");//再根据methodID将jstring传到参数result上env->CallObjectMethod(result, appendJmId, temp);return 0;
}

2 测试和结果

        针对上述的代码实现,在java层调用native并测试:

public native int testString(StringBuffer result);

        main函数内测试代码:

        JNItest JNI = new JNItest();StringBuffer output = new StringBuffer();int rnt = JNI.testString(output);//StringBuffer通过toString即可转为StringSystem.out.println(output.toString());

        其中StringBuffer通过toString即可转为String,关于Java中这些字符串类型之间关系可参考:Java中字符数组、String类、StringBuffer三者的相互转换 - 功夫 熊猫 - 博客园 (cnblogs.com)

        最后运行结果如下:

         根据结果可以发现,output获取了c/c++层内部sstr的数据内容了。

http://www.dinnco.com/news/56552.html

相关文章:

  • 百度上开个网站怎么做网站优化关键词价格
  • 金水郑州网站建设播放量自助下单平台
  • wordpress多站点数量百度联盟注册
  • 建网站花费搜索热度和搜索人气
  • 整合wordpress和discuzseo是什么的
  • 免费活动策划方案的网站seo公司多少钱
  • 精美网站制作公司石家庄最新疫情
  • 淮安哪里有做网站的100个免费推广b站
  • 广东网站建设定制乐陵seo外包
  • 建站目的域名免费查询
  • 山东网站建设哪家公司好班级优化大师头像
  • 贵阳网站建设hsyunso搜狗搜索引擎入口
  • 网站建设员工分工电商网站开发平台有哪些
  • 广东网站制作设计app推广公司
  • 茶叶网站建设网页设计制作百度云网盘官网
  • 网站建设存在困难长春网站建设策划方案
  • 如何添加网站为信任站点百度今日排行榜
  • 手机免费网站建设免费无代码开发平台
  • 广州乐地网站建设拉新推广怎么找渠道
  • 怎么可以预览自己做的网站跨境电商平台排行榜前十名
  • 南桥网站建设每日精选12条新闻
  • 合肥有什么好的网站建设公司网站搜索量查询
  • 北京新疫情最新公布消息网站推广专家十年乐云seo
  • 电子商务网站分类百度竞价排名的优缺点
  • 做的网站被公安局查出漏洞域名ip查询
  • 湛江seo网站推广高端定制网站建设
  • 东莞市品牌网站建设平台网站入口
  • 网站制作设计方案哈尔滨优化调整人员流动管理
  • 优门设 网站郑州seo优化阿亮
  • 有做直播网网站的公司没有万网阿里云域名查询