0

我的班级有一个成员 myByte 如下。

public class ByteClass {
    private Byte myByte;
    public Byte getMyByte() {
        return myByte;
    }
    public void setMyByte(Byte myByte) {
        this.myByte = myByte;
    }
}

我有一个字符串值,它是FF,我需要将它分配给类成员,我应该怎么做,因为当我尝试它时,我在编译时遇到错误

类型不匹配:无法从 byte[] 转换为 byte我知道我不能将字节数组用于字符串,但我尝试以多种方式做到这一点但没有任何成功。任何想法如何将值 FF 设置为类?

public class ByteHanlder {

    public static void main(String[] args) {
        String str = "FF";
        byte temp = str.getBytes();
        Byte write_data = new Byte(temp);
        ByteClass byteClass = new ByteClass();
        byteClass.setMyByte(temp);
        System.out.println(byteClass.getMyByte());
    }
}
4

3 回答 3

3

假设你真的只想存储一个字节,你可以使用:

int value = Integer.parseInt("FF", 16); 
x.setMyByte((byte) value);

现在,如果您在调试器中查看它,这将为您提供 -1 的值 - 但这只是因为字节已签名,正如其他回答者所指出的那样。如果您想随时查看无符号值,您可以使用:

// Only keep the bottom 8 bits within a 32-bit integer, which ends up
// treating the original byte as an unsigned value.
int value = x.getMyByte() & 0xff;

您仍然可以只存储一个字节 - 然后以无符号方式而不是有符号方式解释它。如果您真的只想存储一个字节 - 8 位 - 我建议您不要更改为使用short.

说了这么多,只需要一个字节的可变包装器类型有点奇怪......也许你可以给我们更多关于你为什么想要这个的上下文,我们也许可以提出更清洁的替代方案。

于 2013-06-22T07:48:39.367 回答
1

你的字符串“FF”似乎是一个十六进制值,对吧?所以你实际上想将它转换为 255 的字节值。

您可以使用此处描述的方法将十六进制字符串转换为字节数组:Convert a string representation of a hex dump to a byte array using Java? .

在您的情况下,您可以将该方法调整为期望 2 个字母的字符串并返回单个字节而不是字节数组。

于 2013-06-22T07:32:14.977 回答
1

String.getBytes返回一个字节数组,因此您不能将字节数组分配给一个字节。

如果要设置 FF 十六进制值,则可以使用

setMyByte((byte)0xff);

但是还有一个问题 0xff 是 2 字节大小,但字节类型是 1 字节。在这种情况下,您可以使用 short 而不是 byte

于 2013-06-22T07:33:47.110 回答