小编Sea*_*ang的帖子

将jbyteArray转换为字符数组,然后打印到控制台

我正在编写一个JNI程序,其中.cpp文件获取jbyteArray,我希望能够使用printf打印jbyteArray.为此,我相信我必须将jbyteArray转换为字符数组.

对于背景知识,我的JNI的java端将String转换为byteArray,然后将byteArray作为参数传递给我的JNI函数.

到目前为止我所做的正确打印出String,但后面是垃圾字符,我不知道如何摆脱这些/如果我做错了.

以下是String的内容:

dsa
Run Code Online (Sandbox Code Playgroud)

什么打印到控制台:

dsa,?
Run Code Online (Sandbox Code Playgroud)

垃圾字符根据字符串的内容而变化.以下是相关代码的一部分:

.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);
}
Run Code Online (Sandbox Code Playgroud)

.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);
}
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.

java-native-interface type-conversion

6
推荐指数
1
解决办法
2万
查看次数