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

What's wrong with byte type? If you only store data and don't do arithmetic and don't need decimal representation for other reasons then it should not matter that it is signed.

于 2013-03-03T22:54:37.467 回答
1

1 字节 = 8 位 = 00000000~11111111(二进制)= 0~255(无符号字节)= 0x00~0xFF(十六进制)

C#:

1字节值是:0~255

爪哇:

1字节值是:-128~127

如果您想在 java 中获得 0~255(无符号字节)值:

字节 b = (字节)值;

例如:字节 b = (字节) 200;

int b = 值& 0xFF ;

例如: int b = 200 & 0xFF ;

于 2017-07-08T02:26:54.437 回答
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到25​​5的表示,我使用这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 回答