在Java中获取无符号字节

4
有没有办法在Java中读取字节并获得与C#相同的“格式”结果?
实际上,在Java中,字节是有符号的(-128,+127),而在C#中不是(0,255)。
我正在使用Java应用程序向服务器发送文件,服务器只期望正字节,因此一旦出现负字节,它就无法正常工作。
具体问题:当我将我的bytes[]序列化为json(使用gson)时,我有来自-128到+127的值,而我想要的是从0到255的值。
希望这足够清楚。
谢谢。

4
没有所谓的“正字节”。一个字节是8位。不同之处在于,使用字节表示数字的方式。C#字节使用普通的二进制表示法,而Java字节使用2的补码表示法,范围为-128到127。在C#和Java中,11111111和11111111是相同的字节。 - Benjamin Gruenbaum
请详细说明您遇到的具体问题,为什么您错误地认为这是解决方案。 - BalusC
@BalusC:我编辑了我的问题,确实不够清晰。 - Bdloul
2个回答

12
如果您想在Java应用程序中获取[0-255]值,请使用如下结构:(b & 0xff),从byte中获取正整数int

-2

Java字节是有符号的,范围从-128到127。如果您想获得0到255的表示,可以使用这两个函数。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接