Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android java傳遞string類型數據給C,androidstring

Android java傳遞string類型數據給C,androidstring

編輯:關於android開發

Android java傳遞string類型數據給C,androidstring


本文接著實現《Android java傳遞int類型數據給C》的還未實現的方法:

public native String sayHelloInC(String s);

先貼一個工具方法,具體意義後面的文章將介紹

/**
 * 把一個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;
}

接著完成sayHelloInC函數

/*
 * Class:     com_wuyudong_javapassdata_JNI
 * Method:    sayHelloInC
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_wuyudong_javapassdata_JNI_sayHelloInC( JNIEnv * env, jobject clazz, jstring jstr) { //調用工具方法把java中的string類型轉換成C語言中的char× char* cstr = _JString2CStr(env, jstr); int len = strlen(cstr); int i; for (i = 0; i < len; i++) { *(cstr + i) += 1; } return (*env)->NewStringUTF(env, cstr); }

MainActivity.java中添加下面代碼:

    public void passString(View v) {
        Toast.makeText(getApplicationContext(), jni.sayHelloInC("hello yudong"), 0).show();
    }

搞定,運行項目

 

獲取更多C相關知識,關注公眾號:“csuanfa”

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved