2
我正在使用JNI(使用本机代码为Android开发)。将指针长度加长
这种情况是我想发送给Java类的一个指向Native对象的指针。为此,我已经看到在将指针方向投入一长段,如下所示:
long pointerDirection = (long)pointer;
这种安全吗?我读过一些体系结构,“长”只有32位,但指针只需要32位,对吧?或者在64位他们也使用64位?
感谢
我正在使用JNI(使用本机代码为Android开发)。将指针长度加长
这种情况是我想发送给Java类的一个指向Native对象的指针。为此,我已经看到在将指针方向投入一长段,如下所示:
long pointerDirection = (long)pointer;
这种安全吗?我读过一些体系结构,“长”只有32位,但指针只需要32位,对吧?或者在64位他们也使用64位?
感谢
这是安全的?
不,绝对不是 - 标准没有这样的保证(即使它可能在许多机器上实际工作)。
您可以将其安全地(仅)转换为整数类型ptrdiff_t
。
然后'ptrdiff_t'怎么会传给Java ?.如果他想传递指向Java的指针,他可以'reinterpret_cast'到'jlong' – msam
如果您担心类型的宽度可能会发生变化,为什么不选择固定宽度类型,比如'uint64_t',并且如果您希望本机指针类型只用于'intptr_t'。 – luk32