私の.cppファイルがjbyteArrayを取得し、printfでjbyteArrayを印刷できるJNIプログラムを作成しています。そのためには、jbyteArrayを文字配列に変換する必要があると思います。jbyteArrayを文字配列に変換してコンソールに出力する
バックグラウンドについては、JNIのJava側でStringをbyteArrayに変換し、そのbyteArrayをJNI関数の引数として渡します。
私がこれまで行ってきたことは、文字列を正しく出力しますが、その後にジャンク文字が続き、私が何か問題があった場合、これらを取り除く方法はわかりません。
dsa
とどのような印刷物をコンソールに:ここで
は、文字列が何であるかである
dsa,�
ジャンク文字が文字列が何であるかに応じて変化します。
.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);
}
任意の助けをいただければ幸いここ は、関連するコードの一部です。
申し訳ありませんが、非常に初心者の質問のように聞こえますが、1バイト長のバッファを作るにはどうすればいいのですか? –
@SeanSenWang私の編集を参照してください。 –
ありがとう、魅力的なように働いた。私はC++ではないので、malloc呼び出しが行われたときに(char *)にキャストする必要があります。 –