2017-04-26 9 views
0

私は非常に新しいC++です。私はunsigned shortをjcharArrayにキャストする方法を知らない。unsigned shortを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を返す方法を知っている、あなたは私を助けることができないのですか?

+0

'jcharArray'(または' char [] ')のようなUTF-16コード単位の配列の' HD'は?それは ''\ u0000''で終了するのですか、またはデータは常に512コード単位ですか? Javaの 'string'(UTF-16コード単位の数えられたシーケンス)を返さないのはなぜですか? –

答えて

1

多分これはあなたのためのソリューションとなります。

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

私が代わりに文字列を経由して行くだろう。

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

、あなたはここで見てみることができます:

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

はjcharArrayを返す方法を確認するために

もう一つの方法は、前後に配列を渡すことです

これが役に立ちます。

JNIで楽しんでください!

+0

あなたは私をたくさん助けてくれました、ありがとう!!!! – Jenks

+0

'string'はおそらくより良い戻り値の型だと思います。しかし、このレシピでは、変更されたUTF-8エンコーディングされたテキストのみを入力として受け取る 'NewStringUTF'を使います。 'NewString'はおそらくより適用可能です。 –

関連する問題