簡體   English   中英

獲取從Java到C ++ JNI的字符串數組

[英]Get an Array of Strings from Java to C++ JNI

美好的一天,我試圖使用JNI將Java字符串數組復制到C ++數組。 我試過這個,但似乎沒有工作。

char *myarray;

JNIEXPORT void JNICALL
Java_com_Example_accessArray(JNIEnv *env, jobject obj, jobjectArray stringArrays){
      int size;
         size = env->GetArrayLength(stringArrays);
    myarray = env->GetCharArrayRegion(stringArrays, 0, size, null);

}

myarray在傳遞的Java數組中是否保持相同的值? 或者如何將通過JNI傳遞的java String數組的值復制到C ++數組中,因此C ++中的數組是否具有相同的值? 提前致謝。

您傳遞了一個對象數組,因此您不能只從此數組中獲取字符。 一種方式是這樣的:

int size = env->GetArrayLength(stringArrays);

for (int i=0; i < size; ++i) 
{
    jstring string = env->GetObjectArrayElement(stringArrays, i);
    const char* mayarray = env->GetStringUTFChars(string, 0);
    .... do some work or copy it to a c++ array of char*....
    env->ReleaseStringUTFChars(string, myarray);
    env->DeleteLocalRef(string);
}

這是我用來將Java字符串數組String[]轉換為C ++ vector<string>

void Java_com_domain_project_activity_stringArrToStringVector(JNIEnv *env, jobject obj, jobjectArray jstringArr) {
        vector<string> stringVec;

        // Get length
        int len = env->GetArrayLength(jstringArr);

        for (int i=0; i<len; i++) {
            // Cast array element to string
            jstring jstr = (jstring) (env->GetObjectArrayElement(jstringArr, i));

            // Convert Java string to std::string
            const jsize strLen = env->GetStringUTFLength(jstr);
            const char *charBuffer = env->GetStringUTFChars(jstr, (jboolean *) 0);
            string str(charBuffer, strLen);

            // Push back string to vector
            stringVec.push_back(str);

            // Release memory
            env->ReleaseStringUTFChars(jstr, charBuffer);
            env->DeleteLocalRef(jstr);
        }
}

在Java方面,該函數將如下所示:

void stringArrToStringVector(String[] jstringArr);

最后,作為旁注,要從Java字符串列表轉換為字符串數組(您將傳遞給JNI函數),您可以執行以下操作:

List<String> strList = new ArrayList<>();
// Populate strList
String[] strArr = new String[strList.size()];
strList.toArray(strArr);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM