0 から 255 までの数値のバイト / 8 ビット表現を取得する必要があります。Java でこれを行う快適な方法はありますか? ほとんどのメソッドは 4 バイト長の整数で動作するように意図されているようですか? 私の最終的な目標は、いくつかの 8 ビット値をファイルに書き込むことです。
これに関するヒントをありがとう!
アレックスの答えを完成させるには:
int i = 255;
byte b = (byte) i;
System.out.println("b = " + b); // b = -1
int i2 = b & 0xFF;
System.out.println("i2 = " + i2); // i2 = 255
バイトに注意。署名されています。たとえば、-128 から 127 です。0 から 255 が必要な場合は、印刷するときに常に必要です&255
(JB Nizet が例で行ったように)。
byte
タイプの何が問題なのですか?データを保存するだけで算術演算を行わず、他の理由で 10 進数表現を必要としない場合は、署名されているかどうかは問題になりません。
に読み込む場合はint
、 でマスクして& 0xff
ください。間の間接層を提案し(In|Out)putStream
ます。エンディアンなどの詳細をカバーします。
書き込みオブジェクトで:
public void unsignedByte(int value) throws IOException {
if (!(0 <= v && v <= 0xff) {
throw IllegalArgumentException();
}
out.write(v);
}
読み取りオブジェクトで:
public int unsignedByte() throws IOException {
int v = in.read();
if (v == -1) {
throw EndOfFileException();
}
assert 0 <= v && v < 0xff;
return v;
}
Javaバイトは-128から127まで署名されています。0から255までの表現を取得したい場合は、この2つの関数を使用します
public static byte fromIntToByte(String value) throws Exception {
return fromIntToByte(Integer.parseInt(value));
}
public static byte fromIntToByte(int value) throws Exception {
String stringByte = "";
if (value < 0 && value > 255) {
throw new Exception("Must be from 0<=value<=255");
}
if (value <= 127) {
for (int i = 0; i < 8; i++) {
stringByte = String.valueOf(value % 2) + stringByte;
value = value / 2;
}
} else {
value = value / 2;
for (int i = 0; i < 7; i++) {
stringByte = String.valueOf(value % 2) + stringByte;
value = value / 2;
}
stringByte = "-" + stringByte;
}
System.out.println(stringByte);
byte b = Byte.parseByte(stringByte, 2);
return b;
}