文档章节

在C++中如何将jni传过来的jstring转为char*

MingliC
 MingliC
发布于 2013/12/23 13:45
字数 147
阅读 4486
收藏 0


在C++中如何将jni传过来的jstring转为char*,折腾了半天,这个必需要分享!!!


char* JniUtil::jstringToChar(JNIEnv *env, jstring jstr)
{
    char * rtn = NULL;
    jclass clsstring = env->FindClass("java/lang/String");
    jstring strencode = env->NewStringUTF("UTF-8");
    jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");
    jbyteArray barr= (jbyteArray)env->CallObjectMethod(jstr,mid,strencode);
    jsize alen = env->GetArrayLength(barr);
    jbyte * ba = env->GetByteArrayElements(barr,JNI_FALSE);
    if(alen > 0)
    {
        rtn = (char*)malloc(alen+1); //new char[alen+1];
        memcpy(rtn,ba,alen);
        rtn[alen]=0;
    }
    env->ReleaseByteArrayElements(barr,ba,0);
    
    return rtn;
}


© 著作权归作者所有

共有 人打赏支持
MingliC
粉丝 4
博文 18
码字总数 5458
作品 0
珠海
程序员
私信 提问
加载中

评论(1)

meizhitu
meizhitu
GetStringUTFChars 用这个不好吗。。
JNI的某些数组和字符串类型转换

1、jbytearray转c++byte数组 2、jbyteArray 转 c++中的BYTE[] 3、C++中的BYTE[]转jbyteArray 4、jbyteArray 转 char * 5、char* 转jstring 下面这个没有用过,刚看到,也写进来,以后如果遇到...

robinjiang
2016/12/08
28
0
JNI知识(四)Java调用C++/C函数之Java参数类型是String

前面提到JNI主要是可以完成Java调用C++/C函数,C++/C也可以调用Java方法。先看Java调用C++/C函数。 下面先看java接口参数是String类型(入参) example: Java interface public void setNam...

yixinuestc
2018/06/28
0
0
Android-NDK开发之基础--Android JNI有关Java类命名方式

(Ljava/lang/String;I)V 其中本句 I = Integer B = Byte S = Short C = Char LXXX; = L加上类名 3. 在JNI下面,我们常用的命名方式: static JavaVM *g_VM; //全局环境指针 static jclass jN......

鉴客
2011/11/25
519
0
知识(五)Java调用C++/C函数之Java参数类型是Class

这种情况java的class对应C++/C的结构体,即就是java的class中的成员变量和C++/C中结构体的成员变量一一对应。假设C++/C的结构体定义为: typedef struct Paratag { int x; short y; char az[1...

yixinuestc
2018/06/28
0
0
JNI的提高,Java类型和C(C++)类型转换源代码

JNI的环境准备就不说了, 网上大把大把的, 这里讲到的内容层次稍微深一点, 涉及Java和C的类型问题, 并配了实际案例的源代码。 JNI大体的流程是: Java端发起调用, 使C端的代码运行, 此时从Jav...

晨曦之光
2012/03/09
2K
0

没有更多内容

加载失败,请刷新页面

加载更多

什么是JSONP?

json底层原理: 1.他是利用<script/>里的“src”标签能 进行跨域请求的特性加载资源,但是他加载到的资源会当作一个js脚本解析,所以我们得给他返回一个js脚本。 2.所以我们用一个方法名“f...

红土豆
14分钟前
1
0
ByteBuffer详解

在Java nio中,主要有三大组件:Buffer,Channel和Selector。这三者之间的关系可以按照如下方式进行理解: Buffer提供了一个字节缓冲区,其可以不断的从Channel中读取接收到的数据。Buffer的...

爱宝贝丶
15分钟前
3
0
Maven【私有仓库、上传jar包、引用私服jar包、上传本地项目到私服】

搭建私有服务器 前面已经说过了,我们使用Maven的使用,如果需要导入相对应的jar包,Maven首先会在我们的本地仓库中寻找—>私有仓库—>中心仓库… 然而,我们的本地仓库常常没有想要的jar包的...

Nonry
31分钟前
1
0
VARCHART XGantt实践:兼顾清晰和细节的排列优化

VARCHART XGantt是一款功能强大的甘特图控件,其模块化的设计让您可以创建满足需要的应用程序。XGantt可用于.NET,ActiveX和ASP.NET应用程序,可以快速、简单地集成到您的应用程序中,帮助您...

ymy_666666
32分钟前
0
0
Syncfusion教程:在Xamarin.Forms中创建数据输入表单 (1)

下载Essential Studio for Xamarin最新版本 Essential Studio for Xamarin是全面的Xamarin.iOS、Xamarin.Android和Xamarin.Forms组件套包,包含最快的图表和网格。 介绍 欢迎学习使用Syncfus...

电池盒
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部