Java 如何将jbyteArray强制转换为结构?
我使用Java和C之间的JNI代码将字节[]数组从Java传递到C。在C中,参数是jbyteArray,如下所示:Java 如何将jbyteArray强制转换为结构?,java,c,casting,java-native-interface,Java,C,Casting,Java Native Interface,我使用Java和C之间的JNI代码将字节[]数组从Java传递到C。在C中,参数是jbyteArray,如下所示: jint Java_com_my_example_Class_getResult(jbyteArray ary, JNIEnv* env, jobject thiz); 现在,一旦我接收到作为jbyteArray的“ary”,我想将其转换为一个结构,如下所示: struct st { int first; int second; }; 这样做的最佳和最安全的方法是什
jint Java_com_my_example_Class_getResult(jbyteArray ary, JNIEnv* env, jobject thiz);
现在,一旦我接收到作为jbyteArray的“ary”,我想将其转换为一个结构,如下所示:
struct st {
int first;
int second;
};
这样做的最佳和最安全的方法是什么?我应该尝试将jbyteArray转换为char数组,然后按正常方式强制转换,还是有更安全的JNI相关方法来执行此操作?否,您不能将
jbyteArray
强制转换为任何内容!必须使用GetByteArrayElements()
获取实际的jbyte*
指针;然后您可以投射指针。完成后不要忘记释放ByteArrayElements。不,您不能将jbyteArray
强制转换为任何内容!必须使用GetByteArrayElements()
获取实际的jbyte*
指针;然后您可以投射指针。完成后不要忘记释放ByteArrayElements。调用GetByteArrayElements
获取指向字节的指针,并将其大小写为指向结构的大小写。然后别忘了进行相应的释放调用。调用GetByteArrayElements
以获取指向字节的指针,并将其大小写为指向结构的大小写。然后别忘了打相应的释放电话。请参阅;有很多例子;有很多例子。