我有一个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。
答案 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位,则用零填充