Правильный способ преобразования байта [] в 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: Я изменил свой вопрос, чтобы быть реальным вопросом для моей проблемы: (
Ответы
Ответ 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 является переменной в стеке. После выхода из функции эта переменная не определена.
Решение состоит в том, чтобы разделить эту функцию на две части: одну для вычисления размера, а другую с указателем на теперь выделенный массив в качестве параметра для заполнения значений.