xiaobai-baibaoxiang
  • jni的jstring转为char指针

    #include <jni.h>
    #include <stdlib.h>
    #include <android/log.h>
    #define LOG_TAG "System.out"
    #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
    /**
     * 把一个jstring转换成一个c语言的char* 类型.
     */
    char* _JString2CStr(JNIEnv* env, jstring jstr) {
          char* rtn = NULL;
          jclass clsstring = (*env)->FindClass(env, "java/lang/String");
          jstring strencode = (*env)->NewStringUTF(env,"GB2312");
          jmethodID mid = (*env)->GetMethodID(env, clsstring, "getBytes", "(Ljava/lang/String;)[B");
          jbyteArray barr = (jbyteArray)(*env)->CallObjectMethod(env, jstr, mid, strencode); // String .getByte("GB2312");
          jsize alen = (*env)->GetArrayLength(env, barr);
          jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE);
          if(alen > 0) {
                rtn = (char*)malloc(alen+1); //"\0"
                memcpy(rtn, ba, alen);
                rtn[alen]=0;
          }
          (*env)->ReleaseByteArrayElements(env, barr, ba,0);
          return rtn;
    }

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-26
  • 2021-12-18
  • 2022-12-23
  • 2021-06-07
  • 2021-05-01
  • 2022-12-23
猜你喜欢
  • 2021-12-26
  • 2021-12-26
  • 2021-12-26
  • 2021-12-26
  • 2021-12-26
  • 2021-06-16
  • 2022-01-13
相关资源
相似解决方案