我有一个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转换为字节数组。
欢迎所有建议!
答案 0 :(得分:2)
env->SetByteArrayRegion(Array, 0, 4, (jbyte*)CSize);
你在这里说的是取CSize的值(比如它的15)并假设它是jbyte值的内存地址。你真正想要的是给出CSize变量的起始地址。
env->SetByteArrayRegion(Array, 0, 4, (void *)(&CSize));