A correct way to convert byte[] in java to unsigned char* in C++, and vice versa?

I'm newbie in C++ and JNI, I try to find a correct way to convert byte[] in java to unsigned char* in C++ by using JNI, and vice versa ! (I'm working on android) After looking for a solution in google and SO, I haven't found a good details way to convert byte[] in java to C++. Please help me, and provide a solution for a vice versa (unsigned char* in C++ to byte[] in java). Thanks very much

  • byte[] in java to unsigned char* in C++:

JAVA :

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

JNI:

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

PS: I modified my question for being a real question for my problem :(

Answers


You can use this to convert unsigned char array into a 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;
}

to convert the other way around...

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;
}

The array buf is a variable on stack. After leaving the function is this variable undefined.

A solution is separating this function in two, one to compute the size and another with a pointer to now the allocated array as parameter to fill in the values.


Need Your Help

UIWebView throwing exception for [WebActionDisablingCALayerDelegate setBeingRemoved:]

ios objective-c uiwebview ios8

When running against iOS 8, I began to see the following exception coming from the deep bowels of UIWebView:

How To Stop Installation of Multiple Slice APK In Android Studio 2.3

java android apk

After updating the android studio to version 2.3. i am facing issue during installation on android device from android studio.