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

Как преобразовать jbyteArray в native char * в jni?

Я пытаюсь преобразовать jbyteArray в родную строку c (char *) в jni? К сожалению, я не могу найти документацию о том, как это сделать. Я вызываю java-функцию со следующим прототипом в c-коде.

public static byte[] processFile(byte[] p_fileContent)

В c-коде я вызываю эту функцию, которая возвращает массив байтов. Содержимое этого байтового массива представляет собой строку java. Но мне нужно преобразовать его в строку c.

jbyteArray arr = (jbyteArray) env->CallObjectMethod(clsH, midMain, jb);
printf("%s\n", (char*) arr);
4b9b3361

Ответ 1

Я считаю, что вы использовали бы GetByteArrayElements и ReleaseByteArrayElements. Что-то вроде:

boolean isCopy;
jbyte* b = GetByteArrayElements(env, arr, &isCopy);

В этот момент вы должны использовать b для char* для доступа к данным в массиве. Обратите внимание, что это может создать копию данных, поэтому вам нужно будет освободить память с помощью ReleaseByteArrayElements:

ReleaseByteArrayElements(env, arr, b, 0);

Последний параметр - это режим, указывающий, как следует обрабатывать изменения b. 0 указывает, что значения копируются обратно в arr. Если вы не хотите копировать данные обратно в arr, используйте JNI_ABORT.

Подробнее см. Справочник JNI.