2015-01-21 135 views
4

我使用apache poi編寫excel數據。Apache poi excel顏色單元問題

String colour = "A2C465"; 
byte[] ret = new byte[3]; 
for(int i=0; i<3; i++){ 
    ret[i] = (byte)hexToInt(colour.charAt(i * 2), colour.charAt(i*2+1)); 
} 

public int hexToInt(char a, char b){ 
     int x = a < 65 ? a-48 : a-55; 
     int y = b < 65 ? b-48 : b-55; 
     return x*16+y; 
    } 

循環迭代我正在RET = {-94,-60,101}。但實際的RGB碼之後是{162196101}的這個(因爲從轉換的int字節)。由於顏色來作爲不同一個在excel表格中。你能幫我嗎?

+1

的範圍從-128請提供'HEXTOINT的代碼(char c1,char c2){...}'。爲什麼不簡單地使用'Integer.parseInt(「A2」,16)「,''Integer.parseInt(」C4「,16)'等等? – 2015-01-21 07:17:14

+0

感謝您的回覆。我已添加上面的代碼 – Alex 2015-01-21 07:21:52

+0

感謝您的回覆 – Alex 2015-01-21 08:03:34

回答

0

Axel Richter的評論有你正在尋找的答案,如果你需要將字節轉換爲int,你應該使用按位,並避免保留符號。以下示例將字節顯示爲它們的有符號值以及何時轉換爲int。

byte[] ret = DatatypeConverter.parseHexBinary("A2C465"); 
    for (byte b: ret) { 
     int asInt = b & 0xFF; 
     System.out.println(b + " vs " + asInt); 
    } 
0

如果返回值爲負數,只需添加256!

-94 + 256 = 162

-60 + 256 = 196

101將保持101因爲一個字節具有到127