uint64_t到int

mkn*_*mkn 2 c java-native-interface casting uint64

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

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

Mac*_*ade 6

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


R..*_*R.. 6

简短的回答:

uint64_t foo;
int bar;
bar = foo;
Run Code Online (Sandbox Code Playgroud)

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

if (foo-INT_MIN <= (uint64_t)INT_MAX-INT_MIN)
    bar = foo;
else
    /* error case here */
Run Code Online (Sandbox Code Playgroud)