2013-11-22 50 views
0

我有一個整數值,我想將它轉換爲十六進制。將整數轉換爲十六進制字符串

我這樣做:

private short getCouleur(Integer couleur, HSSFWorkbook classeur) { 
if (null == couleur) { 
    return WHITE.index; 
} else { 
    HSSFPalette palette = classeur.getCustomPalette(); 
    String hexa = Integer.toHexString(couleur); 

    byte r = Integer.valueOf(hexa.substring(0, 2), 16).byteValue(); 
    byte g = Integer.valueOf(hexa.substring(2, 4), 16).byteValue(); 
    byte b = Integer.valueOf(hexa.substring(4, 6), 16).byteValue(); 

    palette.setColorAtIndex((short) 65, r, g, b); 

    return (short) 65; 
} 
} 

在輸出我有此:

傳送彩色:65331

:FF33

hexa.substring(0, 2):FF

hexa.substring(2,4):33

hexa.substring(4,6)

ř:-1

:51

b:error message

錯誤消息:字符串索引超出範圍:6

THX。

+1

已經回答了這裏 - http://stackoverflow.com/questions/5258415/how-to-get-hex-value-from-integer-in-java – radai

+0

Integer.toHexString –

+0

@radai它是不一樣的問題 – Mercer

回答

4

如果我理解正確的話,你要分割的int到三個字節(R,G,B)。 如果是這樣,那麼你可以通過簡單地在整數移位位做到這一點:

byte r = (byte)((couleur >> 16) & 0x000000ff); 
byte g = (byte)((couleur >> 8) & 0x000000ff); 
byte b = (byte)(couleur & 0x000000ff); 

這是更有效的。您不必通過轉換爲String來完成。

+0

類型不匹配:無法從int轉換爲字節 – Mercer

+0

@Mercer抱歉,固定 –

+0

工作正常thx;) – Mercer

2

問題是你假設十六進制字符串將是六位數字長。

嘗試String.format ("%06d", Integer.toHexString(couleur));

與零墊,如果低於6個位數渴望

3

您可以在JDK中調用該方法。

String result = Integer.toHexString(131); 
相關問題