1

jni method から unsigned character [] を返したいです。Jni 関数に次のコードがあります。

unsigned char abc[16]
 abc[i] = 'b';

abc を Java コードに返すために jstring と jcharArray を使用しました。しかし、jstring を使用している間、プログラムを正しくコンパイルできません。anb chararray を使用しているときに、奇妙な文字が表示されます。この問題に対処する方法を提案してください。

4

2 に答える 2

4

unsigned char実際、C に対応する Java データ型はbyte. byte[]メソッドをJava 側で返すように宣言し、それに応じて C 側で動作する必要があります。

これが正しいことかどうかは別の問題です。C では、「テキストの文字列」と「バイトの配列」はほとんど同義語です (モジュロ null 終了)。Java ではそうではありません。これは読み取り可能な (ASCII) テキストの文字列ですか? そうであれば、それjstring;として返す方が自然です。C から に変換する[unsigned] char *にはjstring、 を使用しますJNIEnv::NewStringUTF()。ただし、別の注意点があります。文字列が UTF-8 以外のコードページであり、ASCII 以外の文字 (コード >= 0x80) が含まれている場合、これは機能しません。その場合は、文字列をバイト配列として渡し、Java 側で正しいコードページを介して変換する方がよいでしょう。

于 2013-03-12T19:20:59.337 に答える