Я пишу программу JNI, в которой мой файл .cpp получает jbyteArray, и я хочу иметь возможность распечатать jbyteArray с помощью printf. Я считаю, что для этого мне нужно преобразовать jbyteArray в массив символов.
Для базовых знаний Java-сторона моего JNI преобразует String в byteArray, а затем этот byteArray передается в качестве аргумента моей функции JNI.
То, что я сделал до сих пор, выводит строку правильно, но за ней следуют ненужные символы, и я не знаю, как избавиться от них / если я что-то делаю не так.
Вот что такое String:
dsa
и что выводит на консоль:
dsa,�
Нежелательные символы меняются в зависимости от того, что такое String. Вот часть кода, которая имеет отношение к делу:
.java файл:
public class tcr extends javax.swing.JFrame{
static{
System.loadLibrary("tcr");
}
public native int print(byte file1[]);
.....
String filex1 = data1TextField.getText();//gets a filepath in the form of a String from a GUI jtextfield.
byte file1[]= filex1.getBytes();//convert file path from string to byte array
tcr t = new tcr();
t.print(file1);
}
.cpp код:
JNIEXPORT jint JNICALL Java_tcr_print(JNIIEnv *env, jobject thisobj, jbyteArray file1){
jboolean isCopy;
jbyte* a = env->GetByteArrayElements(file1,&isCopy);
char* b;
b = (char*)a;
printf("%s\n",b);
}
Любая помощь будет оценена по достоинству.