Jni 类型转换接口

1、JString char*互相转化

char* 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 = new char[alen+1];

                memcpy(rtn, ba, alen);

                rtn[alen] = 0;

        }

        env->ReleaseByteArrayElements(barr, ba, 0);

        return rtn;

}



jstring CharToJstring(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);

}
View Code

 

你可能感兴趣的:(类型转换)