uint64_t到int

时间:2010-07-21 11:16:04

标签: c java-native-interface casting uint64

我正在为C代码编写一个java绑定,我对C不是很熟悉。

我有一个uint64_t,需要将它转换为int。有谁知道这是怎么做到的吗? (我的绑定然后返回一个jint ......)

6 个答案:

答案 0 :(得分:6)

通常,使用像'uint64_t'这样的精确宽度整数是有充分理由的。 如果你把它强制转换成一个长度可能不是64位的int,你可能会遇到严重的问题......

答案 1 :(得分:6)

答案简短:

uint64_t foo;
int bar;
bar = foo;

从技术上讲,如果foo的值不适合int,则会出现未定义的行为。在实践中,它总是简单地截断高位。如果你想更正确,那么:

if (foo-INT_MIN <= (uint64_t)INT_MAX-INT_MIN)
    bar = foo;
else
    /* error case here */

答案 2 :(得分:3)

如果您正在编写JNI包装器,则uint64_t的最佳匹配是long,而不是int。即使这样,你也会失去准确性,因为Java没有无符号类型(因此是u),你需要准备好检查值的符号。

答案 3 :(得分:2)

请注意,java不支持无符号类型。 java中最接近的类型会很长,因为它也有64位。 将uint64转换为long不会导致数据丢失,因为位数相同,但是大值将显示为负数。

答案 4 :(得分:0)

whatever_your_int_var_name_is = (int)whatever_your_uint64_t_var_name_is;

答案 5 :(得分:0)

... HM 我在C中有方法返回一个page_ID,它是一个uint64_t数字。现在我需要将该数字存储在Java HashMap中。那么将uint64_t存储在Java HashMap中的最佳方法是什么?问题是,当我进行查找操作时,我需要在HashMap中获取该特定值并将其转换回uint64_t,以便我可以在C代码中调用一个函数,该函数需要uint64_t作为参数。

P.S。我用jlong​​ pid =(jlong​​)pid_in_uint64_t完成了它; 到目前为止一直很好......

相关问题