Java での符号なしデータの操作: 符号付きバイトの変換
Java では、byte などのプリミティブ型は本質的に署名されており、つまり、それらは内部のデータ値を表します。指定された範囲。ただし、他のコンテキストでは符号なしとして扱われるデータを処理する必要がある場合があります。
符号なしバイトの変換の課題
Java 言語は、符号なしのネイティブ サポートを提供していません。データ型。したがって、符号なしデータを符号付きバイトに読み込むと、Java が符号付き数値として解釈するため、値が壊れているように見えることがあります。
課題の克服
符号なしバイトを操作するにはJava では、ビット単位の演算を利用できます。基本的に、これらの操作により、符号付きバイトを符号なしであるかのように扱うことができます。
マスクを使用したビット単位の解決策
1 つのアプローチには、ビット単位のマスクを使用して目的のビットを分離することが含まれます。パターン。次の例では、次の unsignedToBytes() メソッドを定義します。
public static int unsignedToBytes(byte a) { int b = a & 0xFF; return b; }
このメソッドでは、入力バイト a とマスク 0xFF にビットごとの AND 演算を適用します。このマスクは、8 ビット目以降のビットを効果的に削除し、目的の符号なし値のみを b に残します。
追加の考慮事項
符号付きバイトを符号なしとして操作する場合でも注意してください。ビット単位の演算を使用すると、基礎となるデータ表現は変更されません。これらの符号なし値を含む操作が正しく処理されるようにするには、データ解釈を明示的に指定するラッパー メソッドまたは変数の使用を検討する必要があります。
例:
void printUnsignedByte(byte b) { int unsignedByte = b & 0xFF; System.out.println(unsignedByte); // "200" }
このメソッドは、 b に格納されている実際の符号付き値に関係なく、ビット単位のマスクを適用し、結果を unsigned int として解釈することにより、入力バイト b の符号なし値を取得します。
以上がJava で符号なしバイトを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。