2013-11-22 51 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); 
相关问题