我是一个非常新的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(¶m_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.HD
是U16 unsigned short[512]
看起来像:
U16 HD[RESERVE_SAMPLE_DEPTH]; // RESERVE_SAMPLE_DEPTH is 512
我不知道如何归还PAT.tSd.HD
,你能帮帮我吗?
答案 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