我想轉換爲從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;
}
C++程序實際上將什麼值讀入'getbool'?換句話說,你可以在讀取之後'printf' getbool的所有值嗎? – sigpwned
我的確在想用int。但我也沒有看到爲什麼你不能在獲得信息後根據需要在int上快速轉換爲bool。假設int值有意義/可解析。 – LanternMike
@sigpwned:查看更新。 – AeroBuffalo