Java字节插入值错误字符串到字节

Java字节插入值错误字符串到字节,java,types,type-conversion,byte,bytearray,Java,Types,Type Conversion,Byte,Bytearray,我有一个类,它有一个成员myByte,如下所示 public class ByteClass { private Byte myByte; public Byte getMyByte() { return myByte; } public void setMyByte(Byte myByte) { this.myByte = myByte; } } 我有一个字符串值,它是FF,我需要将它分配给类成员, 既然我在编译时出错了

我有一个类,它有一个成员myByte,如下所示

public class ByteClass {
    private Byte myByte;
    public Byte getMyByte() {
        return myByte;
    }
    public void setMyByte(Byte myByte) {
        this.myByte = myByte;
    }
}
我有一个字符串值,它是FF,我需要将它分配给类成员, 既然我在编译时出错了,那么我应该怎么做呢

类型不匹配:无法从byte[]转换为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());
    }
}
您的字符串“FF”似乎是十六进制值,对吗?因此,您实际上希望将其转换为字节值255

您可以使用如下所述的方法将十六进制字符串转换为字节数组:

在您的例子中,您可以调整该方法,使其预期为2个字母的字符串,并返回单个字节而不是字节数组。

您的字符串“FF”似乎是十六进制值,对吗?因此,您实际上希望将其转换为字节值255

您可以使用如下所述的方法将十六进制字符串转换为字节数组:


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

string.getBytes
返回bytearray,因此无法将bytearray分配给字节

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

setMyByte((byte)0xff);

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

字符串。getBytes
返回bytearray,因此您不能将bytearray分配给字节

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

setMyByte((byte)0xff);

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

假设您确实只想存储一个字节,您可以使用:

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


说了这么多,只需要一个字节就需要一个可变的包装器类型有点奇怪。。。也许您可以为我们提供更多的背景信息,说明您为什么需要这样做,我们可以建议更干净的替代方案。

假设您确实只想存储一个字节,您可以使用:

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


说了这么多,只需要一个字节就需要一个可变的包装器类型有点奇怪。。。也许您可以为我们提供更多的上下文来解释您为什么需要这样做,并且我们可以建议更干净的替代方案。

因此,我需要将成员定义为字节数组?我应该将其从FF转换为0Xff?有很多选项。。您可以将成员设置为字节数组并轻松设置字节数组。或者您可以将该成员声明为shorth,因此我需要将该成员定义为byte array?并且我应该将其从FF转换为0Xff?有许多选项。。您可以将成员设置为字节数组并轻松设置字节数组。或者您可以将该成员声明为短成员