如何将unsigned short转换为jcharArray?

时间:2017-04-26 13:13:02

标签: android android-ndk java-native-interface

我是一个非常新的C ++。我不知道如何将无符号短文转换为jcharArray。

我的代码:

extern "C"
    jcharArray
    Java_demo_jni_btten_com_testjnidemo_MainActivity_openStaticWaveFile() {
        float hanfengl, distance;
        int vertical;
        FILE *fp = NULL;
        fp = fopen("/storage/emulated/0/Download/3.stwav", "rb"); 

        PAT.bscan_play_flag = 0;
        U32 cur_param_len = sizeof(PB) + sizeof(Chan[PB.C_N]) + sizeof(PAT.tSd);
        U32 filetype;
        U32 param_len;
        U16 DateStart[6];
        U16 DateEnd[6];

        fread(&filetype, sizeof(filetype), 1, fp);
        fread(DateStart, sizeof(DateStart), 1, fp);
        fread(DateEnd, sizeof(DateEnd), 1, fp);
        fread(&param_len, sizeof(param_len), 1, fp);
        fread(&hanfengl, sizeof(hanfengl), 1, fp);
        fread(&distance, sizeof(distance), 1, fp);
        fread(&vertical, sizeof(vertical), 1, fp);

        if (param_len == cur_param_len) {
            if (PAT.tSto.Read_Start_Flag != 1)    // 读开始标志
                PAT.tSto.Read_Start_Flag = 1;
            fread(&PB, sizeof(PB), 1, fp);
            fread(&Chan[PB.C_N], sizeof(Chan[PB.C_N]), 1, fp);
            fread(&PAT.tSd, sizeof(PAT.tSd), 1, fp);
        }
        fclose(fp);
        return PAT.tSd.HD;
    }

PAT.tSd.HDU16 unsigned short[512]

看起来像:

U16       HD[RESERVE_SAMPLE_DEPTH];  // RESERVE_SAMPLE_DEPTH is 512

我不知道如何归还PAT.tSd.HD,你能帮帮我吗?

2 个答案:

答案 0 :(得分:1)

也许这将是一个解决方案:

http://jnicookbook.owsiak.org/recipe-No-010/

我会改用字符串。

另一种方法是来回传递数组:

http://jnicookbook.owsiak.org/recipe-No-013/

另一方面,你可以看看这里:

http://jnicookbook.owsiak.org/recipe-No-014/

了解如何返回jcharArray

希望这有帮助。

与JNI玩得开心!

答案 1 :(得分:0)

jchararray是一个java对象,unsigned short在C ++中是原始的。你不能同时施放两者。您需要使用JNI Array API来执行相同操作并将数据从unsigned short复制到jchararray。

http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html#wp17318