获取 0 到 255 之间数字的字节值?

问题描述 投票:0回答:7

我需要获取 0 到 255 之间数字的字节/8 位表示形式。在 Java 中是否有任何舒适的方法可以做到这一点?似乎大多数方法都适用于 4 字节长的整数?我的最终目标是将几个 8 位值写入文件。

感谢您对此的任何提示!

java file byte
7个回答
18
投票

要完成亚历克斯的回答:

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

4
投票

小心字节。它是signed,例如-128到127。如果你想要0-255,当你去打印它时,你总是需要

&255
(就像JB Nizet在他的例子中所做的那样)


3
投票

byte
类型有什么问题?如果您只存储数据而不进行算术运算,并且由于其他原因不需要十进制表示,那么它是否有符号应该没有关系。


1
投票

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

C#:

1字节值为:0~255

Java:

1字节值为:-128~127

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

字节 b = (字节)值;

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

int b = 值 & 0xFF;

示例:int b = 200 & 0xFF;


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;
}

0
投票
public class play {

    public static void main(String[] args) throws IOException {

        String path = "./src/play.cue"; // file content:\xff\xdd
        
        FileInputStream fis = new FileInputStream(path);

        int[] bytes = new int[(int)new File(path).length()];

        int b, i=0;
        while( (b=fis.read()) != -1){bytes[i] = b; i++;}

        System.out.println(Arrays.toString(bytes));

    }
}

输出: [255, 221]


-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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.