2016-07-04 70 views
0

我試圖將signed int變量轉換爲3字節數組並向後。Java字節Array to signed Int

在功能getColorint,我將int值轉換爲字節數組。這工作正常!

public byte [] getColorByte(int color1){ 
    byte[] color = new byte[3]; 
    color[2] = (byte) (color1 & 0xFF); 
    color[1] = (byte) ((color1 >> 8) & 0xFF); 
    color[0] = (byte) ((color1 >> 16) & 0xFF); 
    return color; 
    } 

但是,如果我嘗試將字節數組轉換回整數與getColorint功能:

public int getColorint(byte [] color){ 
    int answer = color [2]; 
    answer += color [1] << 8; 
    answer += color [0] << 16; 
    return answer; 
    } 

它僅適用於正整數。

下面是調試過程中的截圖: screenshot

我輸入int值是-16673281但我的輸出int值是。

任何人都可以幫助我嗎?

謝謝:)

+0

http://stackoverflow.com/questions/11981966/byte-array-to-signed-int – floyd

回答

1

Color類定義了用於創建和變換顏色整數方法。顏色表示爲壓縮整數,由4個字節組成:阿爾法,紅色,綠色,藍色。 你應該使用它。

1

這裏的問題是字節被簽名。當你做int answer = color[2]color[2] == -1,那麼答案也是-1,即0xffffffff,而你希望它是255(0xff)。您可以使用Guava的UnsignedBytes作爲補救措施,或者簡單地採用將其轉換爲int的color[i] & 0xff

0

由於顏色代表4個字節,您還應該存儲一個alpha通道。

從int:

public byte [] getColorByte(int color1){ 
    byte[] color = new byte[4]; 
    for (int i = 0; i < 4; i++) { 
     color [i] = (byte)(color1 >>> (i * 8)); 
    } 
    return color; 
} 

爲INT:

public int getColorInt(byte [] color){ 
    int res = ((color[0] & 0xff) << 24) | ((color[1] & 0xff) << 16) | 
      ((color[2] & 0xff) << 8) | (color[3] & 0xff); 
    return res; 
}