Ich schreibe ein JNI-Programm, wo meine .cpp-Datei ein JbyteArray erhält und ich in der Lage sein soll, das JbyteArray mit printf zu drucken. Damit das passiert, muss ich das jbyteArray in ein Zeichen-Array konvertieren.Konvertieren von jbyteArray in ein Zeichenarray und dann Drucken auf Konsole
Für Hintergrundwissen konvertiert die Java-Seite meines JNI einen String in ein ByteArray, und dann wird dieses ByteArray als ein Argument an meine JNI-Funktion übergeben.
Was ich bisher gemacht habe, druckt den String korrekt aus, aber es folgen Junk-Zeichen, und ich weiß nicht, wie ich diese loswerden soll/wenn ich etwas falsch mache. Hier
ist, was der String ist:
dsa
und was Druck zu trösten:
dsa,�
Die Junk-Zeichen je ändern, was der String ist. Hier ist der Teil des Codes, der relevant ist:
.java-Datei:
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-Code:
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);
}
Jede Hilfe würde geschätzt.
Tut mir leid, wenn sich das wie eine sehr neue Frage anhört, aber wie würde ich einen Puffer machen, der ein Byte länger ist, und wie würde ich dann das letzte Element bearbeiten? –
@SeanSenWang Siehe meine Bearbeitung. –
danke, arbeitete wie ein Charme. Kleine Bearbeitung obwohl, ich bin in C++ nicht C, also muss ich auf (char *) werfen, wenn der malloc-Aufruf gemacht wird. –