1. 转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47002207

1、将java字符串转化为c++字符串

  1. /**
  2. *工具方法
  3. *将java字符串转化为c++字符串
  4. *返回字符串数组的首地址
  5. */
  6. char* Jstring2CPPStr(JNIEnv* env, jstring jstr, jstring encode) {
  7. char* rtn = NULL;
  8. jclass clsstring = env->FindClass("java/lang/String");
  9. jstring strencode = env->NewStringUTF(encode);
  10. jmethodID mid = env->GetMethodID(clsstring, "getBytes","(Ljava/lang/String;)[B");
  11. jbyteArray barr = (jbyteArray)env->CallObjectMethod(jstr, mid,strencode); // String .getByte("GB2312");
  12. jsize alen = env->GetArrayLength(barr);
  13. jbyte* ba = env->GetByteArrayElements(barr, JNI_FALSE);
  14. if (alen > 0) {
  15. rtn = (char*) malloc(alen + 1); //"\0"
  16. memcpy(rtn, ba, alen);
  17. rtn[alen] = 0;
  18. }
  19. env->ReleaseByteArrayElements(barr, ba, 0); //
  20. return rtn;
  21. }

2、将java字符串转化为c字符串

  1. /**
  2. *工具方法
  3. *将java字符串转化为c字符串
  4. *返回字符串数组的首地址
  5. */
  6. char* Jstring2CStr(JNIEnv* env, jstring jstr, jstring encode) {
  7. char* rtn = NULL;
  8. jclass clsstring = (*env)->FindClass(env, "java/lang/String");
  9. jstring strencode = (*env)->NewStringUTF(env, encode);
  10. jmethodID mid = (*env)->GetMethodID(env, clsstring, "getBytes","(Ljava/lang/String;)[B");
  11. jbyteArray barr = (jbyteArray)(*env)->CallObjectMethod(env, jstr, mid,strencode); // String .getByte("GB2312");
  12. jsize alen = (*env)->GetArrayLength(env, barr);
  13. jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE);
  14. if (alen > 0) {
  15. rtn = (char*) malloc(alen + 1); //"\0"
  16. memcpy(rtn, ba, alen);
  17. rtn[alen] = 0;
  18. }
  19. (*env)->ReleaseByteArrayElements(env, barr, ba, 0); //
  20. return rtn;
  21. }

温馨提示:大家能够到链接http://download.csdn.net/detail/l1028386804/8922611获取完整的JNI调用演示样例代码

Android之——jni通用工具方法的更多相关文章

  1. Android调用JNI本地方法跟踪目标代码

    正如Android调用JNI本地方法经过有点改变章所说跟踪代码是可行的,但是跟踪某些代码会出现anr,点击取消,还是不好运,有提高办法吗?回答是有(gdb还没试过,本文只讨论ida). 下面是我使用  ...

  2. Android调用JNI本地方法经过有点改变

    方法注册好后要经过哪些路 Android一个异常捕获项目 https://github.com/xroche/coffeecatch coffeecatch CoffeeCatch, a tiny n ...

  3. [转][android][利用JNI技术在Android中调用、调试C++代码]

    在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在Android中会生成Linux系统下的.so文件(好吧,其实我基本没用过Linux). 没写过 ...

  4. 【转】Android中JNI的使用方法

    Android中JNI的使用方法 首先看一下Android平台的框架图:(网上盗用) 可以看到Android上层的Application和ApplicationFramework都是使用Java编写, ...

  5. Android 通过 JNI 访问 Java 字段和方法调用

    在前面的两篇文章中,介绍了 Android 通过 JNI 进行基础类型.字符串和数组的相关操作,并描述了 Java 和 Native 在类型和签名之间的转换关系. 有了之前那些基础,就可以实现 Jav ...

  6. Android中JNI的使用方法(转载)

    Android中JNI的使用方法 首先看一下Android平台的框架图:(网上盗用) 可以看到Android上层的Application和ApplicationFramework都是使用Java编写, ...

  7. android — JNI注册方法说明

    Jni中还可以采用RegisterNatives来注册jni的方法,注册以后的jni函数的命名可以不需要符合类似javah命令生成的函数的规则 RegisterNatives为JNIEnv的成员函数, ...

  8. Android 通过JNI实现守护进程,使得Service服务不被杀死

    来自: http://finalshares.com/read-7306 转载请注明出处: http://blog.csdn.net/yyh352091626/article/details/5054 ...

  9. android的JNI 、 NDK 学习!

    转载的! Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) ...

随机推荐

  1. 《Java程序设计》课程试题

    < Java程序设计 >课程试题 一.单项选择题(20题:每题2分,共40分) 1.若数组a定义为int[][]a=new int[3][4],则a是___. A)一维数组 B)二维数组 ...

  2. OAuth - 第三方登录的原理

    第三方登录的原理 所谓第三方登录,实质就是 OAuth 授权.用户想要登录 A 网站,A 网站让用户提供第三方网站的数据,证明自己的身份.获取第三方网站的身份数据,就需要 OAuth 授权. 举例来说 ...

  3. 字符串匹配算法之BM算法

    BM算法,全称是Boyer-Moore算法,1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了一种新的字符串匹配算法. BM算法定义了两个规则: ...

  4. linux学习系列博客地址汇总

    2018-09-28 16:03:43 CentOS7 yum命令:这是一个用来管理rpm包进行自动化安装的C/S模式的一个程序. CentOS7(无图形界面)支持中文显示的办法:系统安装好之后,有可 ...

  5. CF147B Smile House

    题目大意:给定一个有向图,其中边有边权.求点数最少的正环的点数. 题解:建立矩阵,处理其二进制上每一位的状态.时间O(n^3*log(n)). 代码: #include<cstdio> # ...

  6. python各种推导式分析

    推导式comprehensions(又称解析式),是Python的一种独有特性.推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2和3中都有支持: 列表(lis ...

  7. Python之爬虫-段子网

    Python之爬虫-段子网 https://ishuo.cn #!/usr/bin/env python # -*- coding:utf-8 -*- import re import request ...

  8. 洛谷 3953 NOIP2017提高组Day1 T3 逛公园

    [题解] 先建反向图,用dijkstra跑出每个点到n的最短距离dis[i] 设f[u][k]表示dis(u,n)<=mindis(u,n)+k的方案数.对于边e(u,v,w),走了这条边的话需 ...

  9. JavaEE JDBC PreparedStatement

    PreparedStatement @author ixenos PreparedStatement工作原理 注意:虽然mysql不支持PreparedStatement优化,但依然有预编译的实现! ...

  10. 全文搜索(AC-1)-互联网信息过载问题

    什么是信息过载? 信息检索技术是什么? 信息过滤技术是什么?