-1

Javabyteの範囲は -128 から 127 ですが、C++BYTEunsigned char(0 から 255)です。

C++ 関数を Java に変換したいのですが、C++ にはLPBYTE(配列へのポインター) があります。C++ 関数ではなく配列BYTEを使用しようとしましたが、Java 関数はまだ正しく動作しません。byteLPBYTE

私の C++ 関数は BMP ファイルで動作し、そのアルゴリズムはカスタマイズされたランレングス エンコーディングです。それをJavaに変換する際に、を使用し、BufferedImageそのコンテンツを として取得していbyte[]ます。タイプの不一致が原因で、Java 関数が正しく機能していないと推測しています。

Java ではどの型を使用する必要がありますか?

4

3 に答える 3

6

Javaでは、プレーンを使用して、必要に応じてにbyte変換できますintb & 0xFF

問題は、Java がポインターをサポートしておらず、バイトへのポインターを Java に渡すことができないことです。最も近いものはbyte[]です。

RLE エンコーディングのみを行っている場合、バイトの実際の値は重要ではないため、符号付きか符号なしかは関係ありません。BMP ファイルをデコードする場合は、必要に応じて上記のマスクを使用できます。

バイト配列を読み書きするときの一般的な解決策は、ByteBuffer を使用することです。これは、リトルエンディアンまたはビッグ エンディアンの順序で、shortまたはなどの長い型を記述することをサポートし、事前に正確な長さを知る必要はありません。int

于 2012-10-31T13:39:50.967 に答える
1

Java には符号なしの型はありません ( char16 ビット以外は)。byteしたがって、符号付き整数で動作するようにコードを選択して書き直すしかありません。この投稿についてサポートが必要な場合は、コードを送信してください。

于 2012-10-31T13:34:23.813 に答える
1

Java には unsigned バイト型はありません。代わりに使用できますshort。これは、0 から 255 までのすべての値を表すことができます。

于 2012-10-31T13:35:29.940 に答える