2013-06-22 38 views
0

我有一个类有一个成员myByte如下。Java字节插入值错误字符串到字节

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

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

类型不匹配:无法从字节[]转换为字节我知道我不能使用字符串数组作为字符串,但我试图用几种方式做到这一点,没有任何成功.any想法如何设置值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

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

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。说到这一切,需要一个可变的包装类型只是一个字节有点奇怪......也许你可以给我们更多的背景知道为什么你想要这个,我们可能会建议更清洁的替代品。

1

你的字符串 “FF” 似乎是一个十六进制值,对不对?所以,你真的想将其转换为255

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

在你的情况,你可以适应该方法期望一个2个字母的字符串,并返回一个字节,而不是一个字节数组。

1

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

如果你想设置FF十六进制值,那么你可以使用

setMyByte((byte)0xff); 

但仍然有一个问题将0xFF 2字节大小,但是字节类型为1个字节。在这种情况下,你可以用很短的,而不是字节

+0

所以我需要将成员定义为字节数组?我应该将其从FF转换为0Xff? –

+0

有很多选项..您可以将成员设置为字节数组并轻松设置字节数组。或者你可以声明该成员简短 – stinepike