#android #c #kotlin #android-ndk
#Android #c #котлин #android-ndk
Вопрос:
Я хотел бы прочитать unsigned long long из моего кода Kotlin. Значение поступает из кода C через JNI.
Вот код C :
unsigned long long getMaxValue() {
return -1;
}
Вот код JNI :
extern "C"
JNIEXPORT jlong JNICALL
Java_com_tb_of_1ir_MainActivity_getMaxValue(JNIEnv *env, jobject thiz) {
static auto a = MyCppSingleton::get();
return a->getMaxValue();
}
И вот код Kotlin :
Toast.makeText(this, "getMaxValue : "${getMaxValue()}"", Toast.LENGTH_LONG).show()
private external fun getMaxValue(): Long
Я также пробовал с BigInteger, но безрезультатно…
Спасибо!
Комментарии:
1. Почему вы возвращаете отрицательное число, если возвращаемый тип равен
unsigned
?2. Это получить максимальное значение, возможное для unsigned long long .
3. Максимальное значение для unsigned long long равно
std::numeric_limits<unsigned long long>::max();
. Во-вторых, я предлагаю вам использовать типы C , которые точно описывают количество битов и тип знакаint64_t
,uint64_t
т. Е. , и т.д. вместоunsigned long long
.4. Да, вы правы, я думаю, это более явно для компилятора.
5. Java знает только целые числа со знаком, unsigned здесь не будет работать.
Ответ №1:
Это невозможно простым способом. Возможно, путем декомпозиции.