C中有各种方便的整数类型。您想要的一种可能是intptr_t或uintptr_t:
return (jlong)(intptr_t) ptr;
区别?
- 从铸造
intptr_t
到jlong
和背部是保证提供的工作jlong
是够大(这你隐含假设它是无论如何)。 - 从投放
uinttptr_t
到jlong
和背部避免符号扩展,但未定义的行为,如果uintptr_t
是太大,不适合在jlong
(但所有的“健全”的架构/编译器只需使用两个互补算术)

C中有各种方便的整数类型。您想要的一种可能是intptr_t或uintptr_t:
return (jlong)(intptr_t) ptr;
区别?
intptr_t到
jlong和背部是保证提供的工作
jlong是够大(这你隐含假设它是无论如何)。
uinttptr_t到
jlong和背部避免符号扩展,但未定义的行为,如果
uintptr_t是太大,不适合在
jlong(但所有的“健全”的架构/编译器只需使用两个互补算术)