お疲れ様です。はるさらと申します。
Javaを扱っていると「0xff」をbyteに変換したい場面に出くわすこともあります。
特にバイナリデータ処理や通信関連のプログラムでは、
16進数リテラルを扱うことが多いため、
正しい変換方法を理解しておくことは重要です。
本記事では、Javaにおける0xffをbyteへ変換する方法を、
初心者向けサンプル付きでわかりやすく解説します。
関連記事: Javaでの「0x」の意味を解説 ― 初心者向けサンプル付き
関連記事: 【Java】0x00とStringの扱いを解説!初心者向けサンプル付きでわかりやすく解説
0xffとは何かを整理する
まず「0xff」とは何を意味しているのでしょうか。
0xは16進数を表すプレフィックスffは16進数で「255」に相当- つまり
0xff= 255 (10進数)
ただし、Javaのbyte型は -128 ~ 127 の範囲しか表現できません。
そのため、255を直接byteに収めると符号付きの負の値に変換されます。
基本例:0xffをbyteにキャストする
最もシンプルな方法はキャストです。
public class ConvertFFToByte {
public static void main(String[] args) {
int value = 0xff; // 255
byte b = (byte) value;
System.out.println(b); // -1 と出力される
}
}
結果は -1 になります。
これはbyteの範囲に収めるためにオーバーフローが発生し、
2の補数表現として-1になるためです。
実務利用例:バイト配列に格納する場合
通信データやファイル処理では、byte[]に格納するケースが一般的です。
public class ByteArrayExample {
public static void main(String[] args) {
byte[] buffer = new byte[2];
buffer[0] = (byte) 0xff; // -1
buffer[1] = (byte) 0x7f; // 127
for (byte b : buffer) {
System.out.println(b);
}
}
}
出力は次のようになります。
-1
127
ここで0xffは-1として格納されますが、
バイナリデータとしては正しく「0xff」の1バイトが保存されています。
代替手法の比較:符号なし表現を扱う場合
Javaには符号なしbyte型が存在しないため、
0xffを符号なしの255として扱いたい場合は工夫が必要です。
1. intで受けてマスク処理
public class UnsignedExample {
public static void main(String[] args) {
byte b = (byte) 0xff;
int unsignedValue = b & 0xff; // マスク処理で255を得る
System.out.println(unsignedValue); // 255
}
}
2. Byte.toUnsignedInt() を使う
Java 8以降であれば、標準メソッドが利用できます。
public class UnsignedExample2 {
public static void main(String[] args) {
byte b = (byte) 0xff;
int unsignedValue = Byte.toUnsignedInt(b);
System.out.println(unsignedValue); // 255
}
}
これにより、直感的に「符号なし変換」ができるようになります。
注意点と間違えやすいポイント
(byte) 0xffは255ではなく-1になる
Javaのbyteは符号付き型なので注意。- 符号なし表現が欲しいときはintで扱う
b & 0xffやByte.toUnsignedInt()を利用。 - 表示と内部データを混同しない
出力では-1でも、内部的には「0xff」というビット列が保持されている。
関連記事リンク
- Javaでの「0x」の意味を解説 ― 初心者向けサンプル付き
- 【Java】0x00とStringの扱いを解説!初心者向けサンプル付きでわかりやすく解説
- 【Java】0埋めで文字列や数値を整形する方法まとめ【初心者向けサンプル付き】
まとめ
0xffは16進数で255を表すbyteにキャストすると-1になる(符号付き表現のため)- 実務では
byte[]で扱うことが多い - 符号なしの255として使いたい場合は
b & 0xffやByte.toUnsignedInt()を使う
Javaでの16進数やbyte変換を正しく理解しておくことで、
バイナリ処理や通信プログラムを安全に実装できます。
どなたかのお役に立てば幸いです。
それではまたー!

































![【ColofulBox】『[Installatron] WordPress プラグイン~が利用可能になりました』のメールを止める方法](https://harusara22.work/wp-content/uploads/2023/04/E784A1E9A18C124_20230410082422-768x460.jpg?v=1681082704)



