2013-05-20 129 views
3

我想轉換爲從Java傳遞到C++的布爾數組只是一個布爾型數組。然而,無論布爾值是什麼,它總是被判斷爲真,因爲該值大於0.我的最新嘗試代碼的數是:將Java布爾數組轉換爲C++布爾數組

jint capsLen = env->GetArrayLength(capabilities); 
if (capsLen <= 0) 
{ 
    print error; 
    return; 
} 

bool capsArray[capsLen]; 
jboolean *getbool = env->GetBooleanArrayElements(capabilities, NULL); 
for (int i = 0; i < capsLen; i++) 
    capsArray[i] = (bool)getbool[i] 

我也試過:

jboolean getbool[1]; 
bool capsArray[capsLen]; 

for (int i = 0; i < capsLen; i++) 
{ 
    env->GetBooleanArrayRegion(capabilities, i, 1, getbool); 
    capsArray[i] = getbool; 
} 

這兩位代碼都給出了​​變量的一個大於1的整數值。

我不太清楚我在做什麼錯誤,並且似乎找不到任何示例代碼在線工作(即如果我能找到任何東西完全)。我該如何翻譯從Java傳遞的jbooleanArray中的布爾值到C++中的布爾值數組?另外,如果有人提出這個問題,我不能使用整數數組而不是布爾數組,因爲Java代碼必須將信息作爲布爾值。

編輯: @sigpwned對於第一碼塊,則返回的值的一個例子(利用printf("%d", getbool[i])):

208,160,155,65,248,106,154,65,248,106 ,154,65

應該指出,這些數字並不總是一致的。

編輯:所提供的布爾值是:

F,T,T,F,F,F,T,F,T,F,T,T

編輯:全功能代碼

JNIEXPORT bool JNICALL Java_com_NativeClient_Login(JNIEnv *env, jobject, jstring userJ, jstring passJ, jstring serJ, jboolean useJ, jstring resJ, jbooleanArray capabilities) 
{ 
    LOGI("%s", __PRETTY_FUNCTION__); 
    if (cst_ == NULL) { 
    LOGE("cst is not initialized"); 
    return false; 
    } 

    std::string user = env->GetStringUTFChars(userJ, NULL); 
    std::string pass = env->GetStringUTFChars(passJ, NULL); 
    std::string ser = env->GetStringUTFChars(serJ, NULL); 
    std::string res = env->GetStringUTFChars(resJ, NULL); 
    jint capsLen = env->GetArrayLength(capabilities); 
    if (capsLen <= 0) { 
    LOGE("Provided capabilities array is empty or negative or errored"); 
    return false; 
    } 

    bool capsArray[capsLen]; 
    jboolean *getbool = env->GetBooleanArrayElements(capabilities, NULL); 
    LOGE("sizeof(getbool): %d", sizeof(getbool)); // Returns: 4 
    for (int i = 0; i < capsLen; i++) { 
    capsArray[i] = (getbool[i] == JNI_TRUE); 
    LOGE("capsArray[%d]: %d", i, capsArray[i]); // All zero 
    capsArray[i] = !(getbool[i] == JNI_FALSE); 
    LOGE("capsArray[%d]: %d", i, capsArray[i]); // All one 
    } 

    if (!cst_->SetCapabilitiesArray(capsArray, capsLen)) { 
    LOGE("Error is setting capabilities array, most likely it is a length mismatch"); 
    return false; 
    } 

    cst_->SetUserInfo(user, pass, ser, useJ, res); 
    return true; 
} 
+0

C++程序實際上將什麼值讀入'getbool'?換句話說,你可以在讀取之後'printf' getbool的所有值嗎? – sigpwned

+0

我的確在想用int。但我也沒有看到爲什麼你不能在獲得信息後根據需要在int上快速轉換爲bool。假設int值有意義/可解析。 – LanternMike

+0

@sigpwned:查看更新。 – AeroBuffalo

回答

3

所以這個問題,不是用代碼C++的一面,但我缺乏的Java知識和固執的問Java的人尋求幫助。

事實證明,我正在構建並傳遞我的函數Boolean caps[]而不是boolean caps[]