2011-12-08 78 views
12

jbyteArrayをjniのネイティブC文字列(char *)に変換しようとしていますか?残念ながら、私はどのようにそれを行うためのドキュメントを見つけることができません。私は、Cコードで次のプロトタイプを使ってjava関数を呼び出しています。jbyteArrayをjniのネイティブchar *に変換するには?

public static byte[] processFile(byte[] p_fileContent) 

私はバイト配列を返すこの関数を呼び出しています。このバイト配列の内容はJava文字列です。しかし、私はそれをCの文字列に変換する必要があります。

jbyteArray arr = (jbyteArray) env->CallObjectMethod(clsH, midMain, jb); 
printf("%s\n", (char*) arr); 

答えて

17

私はあなたがGetByteArrayElementsReleaseByteArrayElementsを使用するであろうと信じています。あなたは配列内のデータにアクセスするためには、この時点でchar*bをキャストすることができるはず

boolean isCopy; 
jbyte* b = GetByteArrayElements(env, arr, &isCopy); 

:ような何か。あなたがReleaseByteArrayElementsを使用してメモリを解放することを確認したいと思うので、これはデータのコピーを作成することに注意してください:

ReleaseByteArrayElements(env, arr, b, 0); 

最後のパラメータがbへの変更を処理する方法を示すモードです。 0は、値がarrにコピーされたことを示します。データをarrにコピーしたくない場合は、代わりにJNI_ABORTを使用してください。

詳細はJNI Referenceを参照してください。

+0

リンクが壊れています。更新してください。 –

+0

@DRH 1.4.2リンクを1.5リンクに更新することはあまり改善されません。 – EJP

+0

注意深くnullを終了します。一般に、ファイルの内容はnullで終了しません。 C(++)の文字列関数は、それを抑制する可能性があります。確実に回避するには、ファイルバイトをバッファに1バイト大きくコピーし、最後のバイトをゼロに設定する必要があります –

関連する問題