Piszę program JNI, w którym mój plik .cpp otrzymuje wartość jbyteArray i chcę móc wydrukować jbyteArray z printf. Aby tak się stało, uważam, że muszę przekonwertować jbyteArray na tablicę znaków.Konwertowanie jbyteArray na tablicę znaków, a następnie drukowanie na konsolę
Dla wiedzy w tle, strona java mojego JNI konwertuje String na byteArray, a następnie byteArray jest przekazywany jako argument do mojej funkcji JNI.
Co zrobiłem do tej pory poprawnie wypisuje łańcuch, ale za nim pojawiają się postacie ze śmieciami i nie wiem, jak się ich pozbyć/jeśli robię coś złego.
Oto co String jest:
dsa
i co drukuje się pocieszyć:
dsa,�
znaków śmieci zmieniać w zależności od tego, co jest String. Oto część kodu, która jest istotna:
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 będzie mile widziane.
Przepraszam, jeśli to brzmi jak bardzo nowicjusz, ale jak mam zrobić bufor, który jest o jeden bajt dłuższy, a potem jak mam przejść do edycji ostatniego elementu? –
@SeanSenWang Zobacz moją edycję. –
dzięki, działał jak urok. Niewielka edycja, jestem w C++ nie C, więc muszę rzucić (char *), gdy wywołanie malloc jest wykonane. –