将native int转换为Jbyte Array

时间:2014-01-16 18:27:55

标签: java android c++ arrays java-native-interface

我有一个JNI C ++函数,我希望将整数转换为jbyte数组。我需要先将它放在一个原生整数中,以确保它到另一边(C ++客户端可以读取它)

功能如下:

    JNIEXPORT jbyteArray JNICALL Java_com_example_communicationmoduleTCPIP_communicationmoduleTCPIP_CalcSize(
    JNIEnv * env, jobject,
    jint Size){
    jbyteArray Array;

    int CSize = (int)Size;
    //char Buffer[4];

    //itoa(CSize, Buffer, 10);
    //snprintf(Buffer, 4,"%d",CSize);


            __android_log_write(ANDROID_LOG_ERROR, "Tag", "==== 1 ");

            // Init  java byte array
            Array = env->NewByteArray(4);

            __android_log_write(ANDROID_LOG_ERROR, "Tag", "==== 2 ");


            // Set byte array region with the size of the SendData CommStruct.
            // Now we can send the data back.
            env->SetByteArrayRegion(Array, 0, 4, (jbyte*)CSize);

            __android_log_write(ANDROID_LOG_ERROR, "Tag", "==== 3 ");

            return Array;

}

该函数让应用程序在setbyteArrayRegion崩溃,是否有人知道如何正确地将int转换为字节数组。

欢迎所有建议!

1 个答案:

答案 0 :(得分:2)

env->SetByteArrayRegion(Array, 0, 4, (jbyte*)CSize);

你在这里说的是取CSize的值(比如它的15)并假设它是jbyte值的内存地址。你真正想要的是给出CSize变量的起始地址。

env->SetByteArrayRegion(Array, 0, 4, (void *)(&CSize));