将 uint16 转换为 jint 并返回 JNI

标签 c java-native-interface uint16

大家。我在Android下使用JNI编写。 我需要将一个“间隔”作为 uint16 传递到我的 C foo() 中,但之后我使用相同的“间隔”返回到 Java。

C:

 static jint func (JNIEnv* env, jobject object,jstring first)
        {
        /*...action...*/
        uint16  interval;
        jint result = foo (ifirst, &interval);
        return result < 0 ? result : interval;
        }

下面有错误

error: operands to ?: have different types 'jint {aka int}' and 'uint16* {aka short unsigned int*}'

如何使用“间隔”参数来避免错误并继续程序的正确工作?

最佳答案

根据代码,您需要添加强制转换以确保 ?: 运算符的两个条件类型相同。

 static jint func (JNIEnv* env, jobject object,jstring first)
 {
    /*...action...*/
    uint16  interval;
    jint result = foo (ifirst, &interval);
    return result < 0 ? result : (jint)interval;
 }

关于将 uint16 转换为 jint 并返回 JNI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22069835/

相关文章:

C UINT16 如何正确?

c - 使用 scanf 时如何绕过打印新行?

c - pthread并发运行线程c

c - 如果字符常量是 `int' 类型,为什么它们被分配给 `char` 类型的变量?

Android Studio NDK : Compile with ndk-build and get native support with Gradle Experimental

go - 在 Go 中将 uint16 转换为 int16 的正确方法

循环遍历字符串,并用单词分隔?

java - 是否有 Java Advanced imaging api 的本地实现版本?

java - 尝试初始化 vm_args 时出错

c - uint16_t减法GCC编译错误