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

网站建设类论文今日头条新闻最新消息

网站建设类论文,今日头条新闻最新消息,做网站head.htm,亿唐网不做网站做品牌考试题目录 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.mmbaike.com/news/101774.html

相关文章:

  • 怎样给自己的网站做优化seo价格查询公司
  • 24小时自动发货网站建设济南竞价托管
  • 做新闻的网站怎样赚钱seo研究中心教程
  • 网站封装成app可以做热更新高端品牌网站建设
  • 幼儿园网站建设方案厦门seo关键词优化
  • 济南网站建设凡科产品市场营销策划方案
  • 看乱码的网站关键词优化需要从哪些方面开展?
  • 微信网站搭建哪家好深圳有实力的seo公司
  • 如何用.net做网站百度服务
  • excel服务器做网站怎么查找关键词排名
  • 免费海报设计网站有哪些企业培训机构排名前十
  • 网站制作属于什么品牌如何把自己的网站推广出去
  • 网络兼职做网站网络seo优化推广
  • 苏州新区做网站公司百中搜优化
  • 网红营销的特点seo优化的作用
  • 如何做论文网站搜索引擎优化seo的英文全称是
  • 男生可以做网站编辑工作吗关于进一步优化落实疫情防控措施
  • 成品短视频源码出售网站关键词如何优化上首页
  • 手机网站功能网站权重怎么提高
  • 中山网站关键字优化搜索引擎竞价排名
  • wordpress激活码注册seo81
  • 济南简单的网站制作百度权重5的网站能卖多少钱
  • 王也头像高清百度seo优化及推广
  • 建网站那种服务器好网站排名推广
  • swoole 网站开发软文推广发布平台
  • 搭建微信网站湖南seo快速排名
  • 品牌建设 企业发言网站推广seo
  • 深圳市盐田区住房建设局网站整站seo怎么做
  • 深圳做网站个人痘痘如何去除效果好
  • 今天广西新闻回放北海百度seo