0

0 から 255 までの数値のバイト / 8 ビット表現を取得する必要があります。Java でこれを行う快適な方法はありますか? ほとんどのメソッドは 4 バイト長の整数で動作するように意図されているようですか? 私の最終的な目標は、いくつかの 8 ビット値をファイルに書き込むことです。

これに関するヒントをありがとう!

4

6 に答える 6

17

アレックスの答えを完成させるには:

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
于 2013-03-03T22:59:00.427 に答える
4

バイトに注意。署名されています。たとえば、-128 から 127 です。0 から 255 が必要な場合は、印刷するときに常に必要です&255(JB Nizet が例で行ったように)。

于 2013-03-03T23:02:52.060 に答える
3

byteタイプの何が問題なのですか?データを保存するだけで算術演算を行わず、他の理由で 10 進数表現を必要としない場合は、署名されているかどうかは問題になりません。

于 2013-03-03T22:54:37.467 に答える
0

に読み込む場合は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;
}
于 2013-03-03T23:02:10.370 に答える
-2

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;
    }
于 2014-01-23T15:03:01.217 に答える