将本机 int 转换为 Jbyte 数组

Converting native int to Jbyte Array

本文关键字:Jbyte 数组 转换 本机 int      更新时间:2023-10-16

我有一个 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转换为字节数组。

欢迎所有建议!

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

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

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