我正在編寫一個JNI程序,其中.cpp文件獲取jbyteArray,我希望能夠使用printf打印jbyteArray。爲了實現這一點,我相信我必須將jbyteArray轉換爲字符數組。將jbyteArray轉換爲字符數組,然後打印到控制檯
對於背景知識,我的JNI的Java端將字符串轉換爲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);
}
任何幫助,將不勝感激。
對不起,如果這聽起來像一個非常新手的問題,但我將如何做一個字節更長的緩衝區,然後我將如何去編輯最後一個元素? –
@SeanSenWang查看我的編輯。 –
謝謝,像一個魅力工作。小編輯雖然,我在C + +而不是C,所以當malloc調用時我必須轉換爲(char *)。 –