我是C++和JNI的新手,我试图找到一种正确的方法来将java中的byte[]转换成C++中的unsigned char*,反之亦然!(我在android上工作)在谷歌寻找了一个解决方案之后,我还没有找到一个很好的细节方法来将java中的byte[]转换为C++。请帮助我,并提供反之亦然的解决方案( C++中的unsigned char*到java中的byte[] )。非常感谢
java中的
中的unsigned char*
JAVA :
private static native void nativeReceiveDataFromServer(byte[] value, int length);
JNI:
... (JNIEnv* env, jobject thiz, jbyteArray array, jint array_length)
{
???
}
PS:我修改了我的问题,因为我的问题是一个真正的问题:
发布于 2013-05-21 18:44:25
您可以使用它将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;
}
发布于 2019-04-05 00:50:44
数组buf是堆栈上的一个变量。在离开函数之后,这个变量是未定义的。
一个解决方案是将这个函数分成两部分,一个用来计算大小,另一个用指针指向现在分配的数组作为参数来填充值。
https://stackoverflow.com/questions/16667029
复制相似问题