小编blu*_*ech的帖子

将Java中的byte []传递给C到JNI中的函数:如何使用jarraybyte

这是我第一次使用JNI,也是我第一次在C中写一些行.

我想要做的很简单.我只是尝试使用C例程切换byte []的endiannes.

在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;
        }
}
Run Code Online (Sandbox Code Playgroud)

所以为了使用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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何使用jbyteArray类型的数据.是否可以将jbyte存储在char中?另一个问题是..当这个例程结束时... java中的byte []会被修改吗?或者它只在C调用内修改? …

c java java-native-interface

32
推荐指数
2
解决办法
3万
查看次数

标签 统计

c ×1

java ×1

java-native-interface ×1