33

我是 C++ 和 JNI 的新手,我尝试找到一种正确的方法,使用 JNI 将 java 中的 byte[] 转换为 C++ 中的 unsigned char*,反之亦然!(我正在研究android)在google和SO中寻找解决方案后,我还没有找到将java中的byte []转换为C++的好方法。请帮助我,并为反之提供解决方案(C++ 中的 unsigned char* 到 java 中的 byte[])。非常感谢

  • java 中的 byte[] 到 C++ 中的 unsigned char*:

爪哇:

private static native void nativeReceiveDataFromServer(byte[] value, int length);

杰尼:

... (JNIEnv* env, jobject thiz, jbyteArray array, jint array_length)
{
    ???
}

PS:我修改了我的问题,因为我的问题是一个真正的问题:(

4

2 回答 2

80

您可以使用它将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;
}
于 2013-05-21T10:44:25.460 回答
-1

数组 buf 是堆栈上的变量。离开函数后,这个变量是未定义的。

一种解决方案是将这个函数一分为二,一个用于计算大小,另一个使用指向现在分配的数组的指针作为参数来填充值。

于 2019-04-04T16:50:43.703 回答