[Investor Relations]   |  官方微博

java培训

美国上市公司 · 亿元级外企Java培训企业

  • jstring 和char* 之间的转换方法

    发布:  来源:  时间: 2015年01月06日

  • ...

  • 这两天一直在折腾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);

    }

  • 上一篇:使用Java测试网络连通性的几种方法

    下一篇:“Java之父”高斯林现在在做什么?

2001-2014 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56