0

我正在用 Java 进行 Android 开发,其中一些本机部分(外部库)是用 C++ 编写的。

我想将一个 byte[] 从托管(Java)应用程序传递到本机(C++)库:

// Declaration for the native method in Java
private native void someMethod(byte[] data);

在本机方面,我想使用字节数组作为另一个提供的本机函数的参数。

我已经阅读了有关将数组数据转换(复制)为兼容类型(GetByteArrayElements)的 JNI 方法,但是这给我留下了jbyte *类型,这与我正在使用的库不兼容(该库定义了它自己的nByte类型,它是一个无符号字符)。

这种情况下的最佳选择是什么?

我应该坚持使用 JNI 描述的方法,并将 jbyte 数组类型转换为适当的 nByte 数组吗?还有其他选择吗?

4

1 回答 1

1

我应该坚持使用 JNI 描述的方法,并将jbyte数组类型转换为适当的nByte数组吗?

是的,因为jbytenByte是不同的类型,这似乎是不触发未定义行为的唯一可靠方法。在实践中, 的大小很可能与 的大小nByte相同jbyte,因此您可以通过重新解释jbyte*as的指针来解决问题nByte*,但这不是一个可移植的解决方案。

int8_t如果您的库采用of ,情况会有所不同<cstdint>,那么您将能够将指针重新解释为jbyte指针,int8_t而不会产生负面影响。

于 2013-07-14T11:09:16.650 回答