Подтвердить что ты не робот

Правильный способ преобразования байта [] в java в unsigned char * в С++ и наоборот?

Я новичок в С++ и JNI, я пытаюсь найти правильный способ преобразования байта [] в java в unsigned char * в С++ с помощью JNI и наоборот! (Я работаю над android) После поиска решения в google и SO я не нашел хороший способ для преобразования байта [] в java на С++. Пожалуйста, помогите мне и предложите решение для наоборот (без знака 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: Я изменил свой вопрос, чтобы быть реальным вопросом для моей проблемы: (

4b9b3361

Ответ 1

Вы можете использовать это для преобразования массива 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;
}

Ответ 2

Массив buf является переменной в стеке. После выхода из функции эта переменная не определена.

Решение состоит в том, чтобы разделить эту функцию на две части: одну для вычисления размера, а другую с указателем на теперь выделенный массив в качестве параметра для заполнения значений.