jstring 和char* 之间的转换方法

[来源] 达内    [编辑] 达内   [时间]2012-12-04

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

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

  //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, "", "([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);

  }

资源下载