Konwertowanie tablicy jbyteArray na tablicę znaków, a następnie drukowanie do konsoli
Piszę program JNI, w którym mój plik .cpp pobiera tablicę jbyteArray i chcę móc wydrukować jbyteArray za pomocą printf. Aby tak się stało, uważam, że muszę przekonwertować tablicę jbyteArray na tablicę znaków.
Dla wiedzy w tle strona java mojego JNI konwertuje ciąg znaków na bajtArray, a następnie ten bajtArray jest przekazywany jako argument do mojej funkcji JNI.
To, co do tej pory zrobiłem, wypisuje poprawnie String, ale po nim następują postacie śmieciowe i nie wiem, jak się ich pozbyć / jeśli robię coś złego.
Oto, czym jest String:
dsa
i co drukuje na konsoli:
dsa,�
Znaki śmieci zmieniają się w zależności od tego, czym jest String. Oto część kodu, która jest odpowiednia:
plik .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);
}
kod .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);
}
Każda pomoc byłaby doceniana.