.cpp ファイルが jbyteArray を取得する JNI プログラムを作成しており、jbyteArray を printf で出力できるようにしたいと考えています。そのためには、jbyteArray を文字配列に変換する必要があると思います。
背景知識として、JNI の Java 側で String を byteArray に変換し、その byteArray を引数として JNI 関数に渡します。
これまでに行ったことは文字列を正しく出力しますが、その後にジャンク文字が続き、これらを取り除く方法がわかりません/何か間違ったことをしている場合。
文字列とは次のとおりです。
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);
}
どんな助けでも大歓迎です。