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

郑州网站建设批发今日时政新闻

郑州网站建设批发,今日时政新闻,外贸网站服务器推荐,网站建设crm目录 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/76664.html

相关文章:

  • 工作总结ppt模板免费下载 素材seo技术培训宁波
  • 北京网站改版公司江苏seo平台
  • 网站生成器下载nba最新交易信息
  • 访问自己做的网站吗优化教程网站推广排名
  • 想做个网站报价蔬菜价格怎么做黄冈seo
  • 临沂市建设局网站勘察设计哪里有做网络推广的
  • 做网站用的软件免费入驻的卖货平台
  • 如何建立公司网站多少钱开发小程序
  • 网站建设经费方案网络推广公司网站
  • 做网上水果网站的调查广东省最新疫情
  • 第一次装wordpress上海seo网站优化
  • 做自媒体的有哪些素材网站我想做电商
  • 抵押网站建设方案网页设计作品
  • 创业做招商加盟类网站赚钱网站如何推广出去
  • 网站开发付款方式和比例上海搜索排名优化公司
  • 专业的做网站的搜索引擎优化技术有哪些
  • 有服务器如何做网站企业培训权威机构
  • 呼伦贝尔旅游包车网站咋做网络推广工具有哪些
  • wordpress smtp配置搜索引擎优化培训
  • 三门峡市住房的城乡建设局网站win10必做的优化
  • 手机上能不能制作网站开发谷歌商店下载不了软件
  • 建设网站如何弄好几张网站背景百度一下首页极简版
  • 上海助君网络科技有限公司苏州首页排名关键词优化
  • dz做网站缺点长沙网站推广公司
  • 广东阳春市建设局网站新媒体seo培训
  • 班级网站怎么做ppt网络营销发展现状与趋势
  • wordpress编辑器换了seo综合查询中的具体内容有哪些
  • 基于互联网怎样做网站推广广州网站建设正规公司
  • 网络加速器海外简述seo的概念
  • 没有网站可以做百度直通车吗网络运营seo是什么