我是C ++和JNI的新手,我试图通过使用JNI找到一种正确的方法将java中的byte []转换为C ++中的unsigned char *,反之亦然! (我正在研究android) 在google和SO中寻找解决方案之后,我还没有找到将java中的byte []转换为C ++的详细方法。请帮助我,并提供相反的解决方案(C ++中的unsigned char *到java中的byte [])。非常感谢
JAVA:
private static native void nativeReceiveDataFromServer(byte[] value, int length);
JNI:
... (JNIEnv* env, jobject thiz, jbyteArray array, jint array_length)
{
???
}
PS:我修改了我的问题,因为我的问题是一个真正的问题:(
答案 0 :(得分:63)
您可以使用此功能将unsigned char
数组转换为jbyteArray
jbyteArray as_byte_array(unsigned char* buf, int len) {
jbyteArray array = env->NewByteArray (len);
env->SetByteArrayRegion (array, 0, len, reinterpret_cast<jbyte*>(buf));
return array;
}
转换另一种方式...
unsigned char* as_unsigned_char_array(jbyteArray array) {
int len = env->GetArrayLength (array);
unsigned char* buf = new unsigned char[len];
env->GetByteArrayRegion (array, 0, len, reinterpret_cast<jbyte*>(buf));
return buf;
}
答案 1 :(得分:-1)
数组buf是堆栈上的变量。离开函数后,该变量未定义。
一种解决方案是将此函数一分为二,一个用于计算大小,另一种使用指向现在分配的数组的指针作为参数来填充值。