我想转换为从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