2013-11-22 4 views
0

정수 값을 가지고 있으며 16 진수로 변환하고 싶습니다. , FF33정수를 16 진수 문자열로 변환

hexa.substring (0 :

뢰르 : 65,331

헥사 난이있다

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

:

난 이렇게 2) : FF

hexa.substring (2, 4) 33

hexa.substring (4, 6) :

R : -1

g 51

b : 오류 메시지

,

오류 메시지 : 문자열 색인이 범위를 벗어 : 6

들으.

+1

이미 답이 여기에 - http://stackoverflow.com/questions/5258415/how-to-get-hex-value-from-integer-in-java – radai

+0

Integer.toHexString –

+0

@radai은 동일 하 문제 – Mercer

답변

4

를 갈망하는 경우 제로와 패드 그것에

String.format ("%06d", Integer.toHexString(couleur)); 시도 (R, G, B)를. 그렇다면, 당신은 단순히 정수의 비트를 이동하여이 작업을 수행 할 수 있습니다 훨씬 더 효율적

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

합니다. String으로 변환 할 필요가 없습니다.

+0

유형 불일치 : int에서 byte로 변환 할 수 없습니다. – Mercer

+0

@Mercer 죄송합니다, 고정 –

+0

잘 작동합니다;) – Mercer

2

문제는 사용자가 16 진수 문자열이 6 자리 길이라고 가정한다는 것입니다.

내가 당신이 int 세에 바이트 분할 할 제대로 이해하고보다 6 개 자리는

3

JDK에서 메소드를 호출 할 수 있습니다.

String result = Integer.toHexString(131); 
관련 문제