2013-06-22 81 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