문제

C 코드를 위해 Java 바인딩을 작성하고 C.

에 실제로 익숙하지 않습니다.

uint64_t가 있고 INT로 캐스팅해야합니다.누구도 그를 어떻게하는지 알고 있습니까? (내 바인딩은 jint ...)

도움이 되었습니까?

해결책

일반적으로 'uint64_t'와 같은 정확한 너비 정수를 사용하면 좋은 이유 때문입니다. int로 캐스팅하는 경우 64 비트가 아닐 수도 있으면 심각한 문제가 발생할 수 있습니다 ...

다른 팁

짧은 대답 :

uint64_t foo;
int bar;
bar = foo;
.

기술적으로 foo의 값이 generacodicicetagcode에 맞지 않으면 정의되지 않은 동작이 없습니다.실제로는 항상 상단 비트를 자릅니다.당신이 더 정확하고 싶다면,

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

JNI 래퍼를 작성하는 경우 uint64_t에 가장 적합한 일치는 int가 아닙니다.Java는 Java가 서명되지 않은 유형 (따라서 U)이 없으므로 정확도가 없으며 값의 표시를 확인할 준비가되어 있어야합니다.

Java는 서명되지 않은 유형을 지원하지 않습니다.Java의 가장 가까운 유형은 64 비트가 있기 때문에 길게 길어질 것입니다. 비트 수가 동일하지만 큰 값이 음수로 표시되므로 UINT64를 길게 털어 내지 않지만 큰 값이 표시되지 않습니다.

whatever_your_int_var_name_is = (int)whatever_your_uint64_t_var_name_is;
.

... uint64_t 숫자 인 page_id를 반환하는 C에서 메소드가 있습니다.이제 Java HashMap에 해당 번호를 저장해야합니다.그렇다면 Java Hashmap에 해당 UINT64_T를 저장하는 가장 좋은 방법은 무엇입니까?문제는 조회 작업을 수행 할 때 해시 맵에서 특정 값을 가져 와서 uint64_t로 다시 캐스팅하여 uint64_t를 인수로 기대하는 C 코드에서 함수를 호출 할 수 있습니다.

p.s.나는 Jlong PID= (jlong) pid_in_uint64_t로 그것을 해냈습니다. 지금 멀리 좋은 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top