虽然有关于将jstring
转换为原生字符串(string nativeString = env->GetStringUTFChars(jStringVariable, NULL);
)的文档,但我找不到将jboolean
转换为bool
或jint
到int
。
有谁能建议如何实现这一目标?
答案 0 :(得分:55)
您只需要使用C样式转换将jint
转换为int
。 jboolean
与bool
相同(如果您使用的是C99 bool
类型)或uint8_t
(如果您使用的是std int类型)或{{1} }。
打开unsigned char
,您会看到$NDK_ROOT/platforms/android-8/arch-arm/usr/include/jni.h
,jint
等只是jboolean
s。
答案 1 :(得分:24)
要将jboolean
(可能只包含值JNI_FALSE
或JNI_TRUE
)投射到原生bool
,我会使用以下内容:
(bool)(jboolean == JNI_TRUE)
如果jboolean
可能不是来自JVM,那么对jboolean != JNI_FALSE
的测试可能会被认为更安全。
答案 2 :(得分:3)
同样的问题 - 修复。在我的情况下,我正在使用openFrameworks,所以我不知道这是否适用于非openFrameworks项目(尚未测试)。但是,外部函数中的前两个参数似乎总是“env”和“thiz”,并且需要为每个新的extern函数明确定义这些参数。
extern "C"{
// casts the variable properly
void Java_com_package_JavaClass_someFunction( JNIEnv* env, jobject thiz, jboolean yourBool ){
myTestApp->someFunction( (bool) yourBool );
}
// "yourBool" will always be "1" because its taking the spot of "thiz" which is not null
void Java_com_package_JavaClass_someFunction( JNIEnv* env, jboolean yourBool ){
myTestApp->someFunction( (bool) yourBool );
}
// "yourBool" will always be "1" because its taking the spot of "env" which is not null
void Java_com_package_JavaClass_someFunction( jboolean yourBool ){
myTestApp->someFunction( (bool) yourBool );
}
}
答案 3 :(得分:1)
奇怪的是jchar
。它被定义为unsigned short
,并且根据您的编译设置,可能与wchar_t
相同或不同。根据您的基础平台,您最好使用UTF8字符串。对于ASCII字符子集,至少这些是按位等效于ASCII。
在Windows和Mac OS / Cocoa上,本机宽字符串表示正好是unsigned short
。 Java字符串自然适合它。
答案 4 :(得分:1)
如果你只是想在if(..)语句中使用它,这对我来说没有转换:
if (jboolean == true) {
return true;
} else {
return false;
}
答案 5 :(得分:0)
这对我有用:
bool isValue = bool(jbooleanValue);