JNI 字符串拼接方法

原创 2015年09月06日 17:33:19

上代码:

//拼接字符串的方法
JNIEXPORT jstring JNICALL Java_cn__DataProvider_sayHelloWorld

(JNIEnv * env , jobjectobj , jstring jstr){

//把java中的string 转化成 c语言里面的char数组

char* cstr = Jstring2CStr(env,jstr);
char* hellostr ="World";
strcat(cstr,hellostr); //拼接两个字符串
return (*env)->NewStringUTF(env,cstr);

}

/**

* 工具方法

* 作用: 把java中的string 转化成一个c语言中的char数组

* 接受的参数 envjni环境的指针

* jstr 代表的是要被转化的java的string 字符串

* 返回值 : 一个c语言中的char数组的首地址 (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");

// String.getByte("GB2312");

jbyteArray barr=

(jbyteArray)(*env)->CallObjectMethod(env,jstr,mid,strencode);

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;

}


相关文章推荐

JNI中string 、 char* 和 jstring 两种转换

JNI中char* 和 jstring 的互相转换 JNI中string 和 jstring 的互相转换
  • xlxxcc
  • xlxxcc
  • 2016年04月09日 18:55
  • 11600

JNI/NDK开发指南(四)——字符串处理

JNI把Java中的所有对象当作一个C指针传递到本地方法中,这个指针指向JVM中的内部数据结构,而内部的数据结构在内存中的存储方式是不可见的。只能从JNIEnv指针指向的函数表中选择合适的JNI函数来...
  • xyang81
  • xyang81
  • 2014年12月24日 00:39
  • 12583

jni开发中遇到的问题4:如何在jni中进行字符串的合并

1:现状:            jni里面没有提供方法来直接执行字符串的追加 2:思路:           a-->  先将jstring变为c string           b-->  再者...

JNI开发入门教程,实现输出一段字符串

为什么使用JNI:         效率上 C/C++是本地语言,比java更高效;         代码移植,如果之前用C语言开发过模块,可以复用已经存在的c代码;         java反编译比...

Java中JNI的使用详解第四篇:C/C++中创建Java对象和String字符串对象及对字符串的操作方法

2013-12-22 09:32 45人阅读 评论(0) 收藏 编辑 取消置顶 删除 目录(?)[+] 首先来看一下C/C++中怎么创建Java对象:在JNIEnv中有两种方法是用来...

三种字符串拼接方式比较

在Java中对字符串的操作可以说是最常用的,在对字符串的操作中有三种拼接字符串的方法,下面我们来看看这三种方式有何不同,在什么时候用比较合适。一、从耗时角度看先来看一段代码:package com.c...

String字符串相加的问题

前几天同事跟我说我之前写的代码中在操作字符串时候,使用字符串相加的方式而不是使用StringBuffer或者StringBuilder导致内存开销很大。这个问题一直在困扰我,因为在《Think in ...

android jni c++ jstring和string之间的转换

jstring str2jstring(JNIEnv* env1,std::string str){ char* pat = string2char(str); JNIEnv* env1 ...
  • zdb1314
  • zdb1314
  • 2017年05月21日 13:26
  • 337

JNI 之 文件的拆分和合并

一、实现思路 创建native方法,然后生成so库,然后调用即可 二、实现 1、创建native方法 NDKFileUtils.java public class NDKFileUtils ...

C++ 中字面值和 string 对象相加

我的主力博客:半亩方塘 标准库允许把字符串字面值和字符字面值转换为 string 对象,当把 string 对象和字符字面值以及字符串字面值混在一条语句中使用时,必须确保加法运算符( + )的两侧...
  • gcvdsvb
  • gcvdsvb
  • 2014年04月06日 15:36
  • 2652
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JNI 字符串拼接方法
举报原因:
原因补充:

(最多只允许输入30个字)