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和C++中的String相互转换

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

Delphi 获取安卓手机WIFI信息(XE8)

Delphi 获取安卓手机WIFI信息(XE8)源码
  • lyf_lyf
  • lyf_lyf
  • 2015年09月02日 01:14
  • 1988

JNI数据类型转换: jstring与char*

#include using namespace std; #include static jstring StringtoJstring(JNIEnv* env, const ch...
  • R_hgt
  • R_hgt
  • 2014年03月10日 18:47
  • 1543

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

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

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

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

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

JNIEXPORT   void   JNICALL   Java_command_Cmd_Command         (JNIEnv   *   env,   jobject   o,   j...
  • fei0724
  • fei0724
  • 2013年09月05日 15:37
  • 9065

jstring 和char* 之间的转换方法

这两天一直在折腾jstring 和char* 之间是如何转换的。在网上找了些例子和张孝祥jni的视频,现把自己成功运行例子贴出来。 //jstring to char* char* jstringTo...

jni使用事例(jstring char*相互转换)

jstring juid= (jstring)minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);           ...

JNI中的jstring 、char* 类型转换

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

jni中jstring与char*转换的乱码问题

这两天在学习使用jni,在java程序中,调用海量词典的dll。利用jni的GetStringChars函数和NewString函数时,遇到了中文乱码的问题,折腾了一个晚上。查阅了一些资料,总结如下:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JNI中jstring 和char* 之间的转换方法
举报原因:
原因补充:

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