2011-08-09 55 views
6

我在我的代碼中有一個小錯誤,我不能爲我的生活弄清楚。Java Byte.parseByte()error

我有一個二進制數據表示(從十六進制轉換後)的字符串數組,例如: 一個索引是1011,另一個是11100.我遍歷數組並填充每個索引的0,以便每個索引是八個字節。當我嘗試這些表象轉化爲實際字節我得到一個錯誤,當我嘗試解析「11111111」我得到的錯誤是:

​​

這裏是一個片段:

String source = a.get("image block"); 
int val; 
byte imageData[] = new byte[source.length()/2]; 

try { 
    f.createNewFile(); 
    FileOutputStream output = new FileOutputStream(f); 
    for (int i=0; i<source.length(); i+=2) { 
     val = Integer.parseInt(source.substring(i, i+2), 16); 
     String temp = Integer.toBinaryString(val); 
     while (temp.length() != 8) { 
      temp = "0" + temp; 
     } 
    imageData[i/2] = Byte.parseByte(temp, 2); 
} 
+2

'byte'只允許在-128到127範圍內的數字。我會使用'int'來代替,它保存的數字範圍爲-21億到21億。 – fireshadow52

回答

19

是不是這裏的問題byte是一個簽名類型,因此它的有效值是-128 ... 127?如果你解析它爲int(使用Integer.parseInt()),它應該工作。

順便說一句,你不必填充零的數字。

一旦你解析你的二進制字符串轉換爲一個int,你可以將其轉換爲字節,但該值仍然會被視爲簽名,這樣binary 11111111將成爲int 255第一,然後byte -1投後。

+0

您的編輯是正確的。 – fireshadow52

1

那麼,八一的是255,並根據java.lang.Byte中,該MAX_VALUE爲2^7 - 1或陽性127

所以你的代碼會失敗,因爲你數過大。第一位是保留的正面和負面的標誌。根據parseByte

1

byte的只允許在-128〜127範圍內的數字我會用一個int相反,持有數量在-2.1十億範圍到2.1十億