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

时间:2013-06-22 07:25:54

标签: 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 的字符串值,我需要将它分配给类成员, 我应该怎么做,因为当我尝试它时,我在编译时遇到错误

类型不匹配:无法从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());
    }
}

3 个答案:

答案 0 :(得分:3)

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

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

现在,如果你在调试器中查看它会给你一个-1的值 - 但这只是因为字节被签名,正如其他的回答者所指出的那样。如果您想随时查看 unsigned 值,可以使用:

// 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

说完这一切之后,需要一个可变的包装类型只是为了一个字节有点奇怪...也许你可以给我们更多的背景知道为什么你想要这个,我们可以建议更清洁的替代品。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

String.getBytes返回一个bytearray,因此您无法将bytearray分配给一个字节。

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

setMyByte((byte)0xff);

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