gpt4 book ai didi

java - 将 Java boolean 数组转换为 C++ boolean 数组

转载 作者:太空狗 更新时间:2023-10-29 21:24:13 25 4
gpt4 key购买 nike

我正在尝试将一个从 Java 传递给 C++ 的 boolean 数组转换为一个 boolean 数组。但是,无论 boolean 值是什么,它总是被评估为真,因为该值是一个大于 0 的数字。我最近的尝试代码是:

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;
}

这两段代码都给 getbool 变量一个大于 1 的整数值。

我不太确定我做错了什么,而且似乎无法在网上找到任何可用的示例代码(也就是说,如果我能找到任何东西的话)。我应该如何将从 Java 传递的 jbooleanArray 中的 boolean 值提取到 C++ 中的 bool 数组中?

此外,如果有人建议,我不能使用整数数组而不是 boolean 数组,因为 Java 代码必须将信息作为 boolean 值。

编辑: @sigpwned 对于第一个代码块,返回值的示例(使用 printf("%d", getbool[i])):

208、160、155、65、248、106、154、65、248、106、154、65

需要注意的是,这些数字并不总是一致的。

编辑:提供的 boolean 值是:

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++ 端,而是我缺乏 Java 知识并且固执地向 Java 人员寻求帮助。

事实证明,我正在构建并传递我的函数 Boolean caps[] 而不是 boolean caps[]

关于java - 将 Java boolean 数组转换为 C++ boolean 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16660075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com