我正在编写一个 JNI 程序,其中我的 .cpp 文件获取一个 jbyteArray,并且我希望能够使用 printf 打印 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);
}
任何帮助,将不胜感激。