将整数转换为十六进制字符串

时间:2013-11-22 08:44:04

标签: java

我有一个Integer值,我想在Hex上转换它。

我这样做:

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;
}
}

在输出中我有这个:

couleur :65331

Hexa :FF33

hexa.substring(0,2):FF

hexa.substring(2,4):33

hexa.substring(4,6)

r : - 1

g :51

b :错误消息

  

错误消息:字符串索引超出范围:6

THX。

3 个答案:

答案 0 :(得分:5)

您可以在JDK中调用该方法。

String result = Integer.toHexString(131);

答案 1 :(得分:4)

如果我理解正确,你想将int分成三个字节(R,G,B)。 如果是这样,那么你可以通过简单地移动整数中的位来实现这一点:

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

效率更高。您无需通过转换为String来完成此操作。

答案 2 :(得分:2)

问题在于您假设十六进制字符串的长度为六位数。

尝试String.format ("%06d", Integer.toHexString(couleur));

如果长度小于6位,则用零填充