JNI中jstring 和char* 之间的转换方法

原创 2016年08月29日 18:04:21

在java中由于是unicode编码,无论是英文字母还是汉字每个字符都是占用2个字节。但是在jni中的字符时utf-8编码,每个字符不是等长的。所以在java和jni调用的时候要注意这个问题。

 

下面是我在网上找到的一些把jstring和char*转换的一些sample代码:

 

jstring to char* 
char* jstringTostring(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);

memcpy(rtn, ba, alen);
rtn[alen] = 0;
}
env->ReleaseByteArrayElements(barr, ba, 0);
return rtn;
}

 

char* to jstring 
jstring stoJstring(JNIEnv* env, const char* pat)
{
jclass strClass = env->FindClass("Ljava/lang/String;");
jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");
jbyteArray bytes = env->NewByteArray(strlen(pat));
env->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat);
jstring encoding = env->NewStringUTF("utf-8");
return (jstring)env->NewObject(strClass, ctorID, bytes, encoding);
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

JNI中char* 和 jstring 的互相转换 JNI中string 和 jstring 的互相转换
  • xlxxcc
  • xlxxcc
  • 2016-04-09 18:55
  • 10175

JNI和C++中的String相互转换

JNI和C++中的String相互转换Uper目前仍在继续先前的工作,这两天一直在折腾jstring 和char* 之间是如何转换的。在网上找了些例子和张孝祥jni的视频,现把自己成功运行例子贴出来。...

jni jstring 、char* 类型的转换

//jstring to char* char* jstringTostring(JNIEnv* env, jstring jstr) {         char* rtn = NULL; ...

JNI中jstring 与 const char* 相互转换函数

在平时的工作,经常用到jni和const类型转换。 //将const char类型转换成jstring类型 jstring CStr2Jstring( JNIEnv* env, const cha...

android JNI调用 - char*与jstring相互转换

在使用jni调用时经常遇到数据类型转换问题,以下是char*与jstring相互转换的代码: //java字符串转C字符串 char* jstringTostr(JNIEnv* env, jstr...

Java基础知识——JNI入门介绍(jstring与char*的转换)

JNIEXPORT   void   JNICALL   Java_command_Cmd_Command         (JNIEnv   *   env,   jobject   o...

jstring转换到C语言所用的char

在做JNI的时候遇到了一个小问题,现在已经搞定,记录下来。 关于java层传递下的string参数,在C语言中定义为jstring。但是C语言在使用的时候需要用到char类型,这里就出现了需...

Android jni中数组参数的传递方式(转)

群:120648059  Android NDK开发交流验证 :  163http://www.cnblogs.com/lgydqy/archive/2012/02/28/2371592.html 1...

JNI中很有用的jstring 与 const char* 的相互转换函数

JNT中很有用的jstring 与 const char* 的相互转换函数 我们使用JNI的时候经常碰到jstring 与 const char*转换的问题,以及中文编码问题, 这里从网上看到的2...

JNI中的jstring 、char* 类型转换

//jstring to char* char* jstringTostring(JNIEnv* env, jstring jstr) {         char* rtn = NULL; ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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