2012-02-10 5 views
1

SWIG Documentation(21.9.1デフォルトのプリミティブ型マッピング)では、C uint8_tは16ビットのJava shortにマップされ、C uint_15_tは32ビットのJava intにマップされます。私はC関数がそれぞれ8ビットと16ビットであると信じていますが、なぜSWIGはJavaでラップするときにビット数を2倍にしますか?SWITのuint8_tとuint16_tへのラップ

答えて

1

問題は、Javaの型は常に署名されていることです。

したがって、0から255までの符号なしCタイプがある場合、その範囲の上半分を表すことができる最小のJavaタイプは短いです。

の代替では、Javaのbyteの負の部分を使用するようにuint8_tを変換何とかシフトするかということですが、の意味は非常に直観に反しています。

+0

uint8_tには意味がありますが、次にuint16_tには短い文字を使用できませんでしたか?なぜ32ビットintを使うのですか? – c12

+0

@ c12全く同じ問題が 'uint16_t'で起こります。 Javaでは 'short'の範囲は-32,768から32,767までですが、' uint16_t'の範囲は0から65,536までです - 'short'を使用した場合、' uint16_t'の上半分はどこに行くべきですか? – Flexo

+0

どのように短くする代わりにバイトを使用するswigを取得するのですか?私はバイトを使用し、これらをswigインターフェイスから渡すjavaのライブラリを使用しています。短いバイトのアップキャストは、署名のために苦痛です。 – Sam

関連する問題