通过 JNI 将 Java 中的 byte[] 传递给 C 中的函数:如何使用 jarraybyte
2022-09-01 06:36:56
这是我第一次使用JNI,也是我第一次不得不用C语言编写一些行。
我试图做的非常简单。我只是尝试使用C例程切换字节[]的字节序。
在java中,它是这样完成的:
public void switchEndianness(byte[] array){
byte byte1;
byte byte2;
for(int i = 0; i < array.length ; i+=2){
byte1 = array[i];
byte2 = array[i+1];
array[i] = byte2;
array[i+1] = byte1;
}
}
因此,为了使用JNI来执行此操作,我试图在JNICALL中引入相同的例程,但它无法编译。到目前为止,我写的是这样的:
JNIEXPORT void JNICALL Java_CEndianness_switchEndianness(JNIEnv *env, jobject obj, jbyteArray array, jint offset, jint length){
char byte1;
char byte2;
int i;
for(i = offset; i < length ; i+=2){
byte1 = array[i];
byte2 = array[i+1];
array[i] = byte2;
array[i+1] = byte1;
}
}
我不知道如何使用jbyteArray类型的数据。是否可以在字符中存储jbyte???另一个问题是..当这个例程结束时...Java中的byte[]会被修改吗?还是只在C调用中修改?
任何帮助???
谢谢大家!