2014-05-19 2 views
2

저는 JNI (네이티브 코드를 사용하여 Android 용으로 개발 중)와 협력 중입니다.포인터를 길게 캐스팅

자바 클래스에 네이티브 객체에 대한 포인터를 보내고 싶습니다. 이를 위해 다음과 같이 포인터 방향을 길게 주조하는 방법을 살펴 보았습니다.

long pointerDirection = (long)pointer; 

안전한가요? 일부 아키텍처에서는 '길다'는 32 비트이지만 포인터는 32 비트가 필요하다는 것을 읽었습니다. 또는 64 비트에서 64 비트를 사용합니까?

감사

+0

타입의 너비가 바뀔 수 있다고 염려된다면'uint64_t'와 같은 고정 폭 타입을 선택하지 말고 네이티브 포인터 타입을 원한다면'intptr_t'로 가십시오. – luk32

답변

2

이 안전한가요?

아니요, 분명히 아닙니다. 표준은 그러한 보증을하지 않습니다 (실제 많은 컴퓨터에서 작동 할 수 있지만).

일체형 ptrdiff_t으로 안전하게 (전용) 전송할 수 있습니다.

+0

'ptrdiff_t'는 어떻게 Java에 전달 될까요?. 만약 그가 자바에 포인터를주고 싶다면'reinterpret_cast'를'jlong'으로 할 수 있습니다. – msam

관련 문제