2011-12-31 20 views
59

Ho bisogno di cambiare un valore intero in un valore esadecimale a 2 cifre in Java. C'è un modo per questo. GrazieNumero intero esadecimale a due cifre in Java

Il mio numero più grande sarà 63 e il più piccolo sarà 0. Voglio uno zero iniziale per valori piccoli.

+0

È necessario stamparlo? devi trasformarlo in una stringa? –

+0

scriverò nel file come esadecimale a due cifre –

+0

Hai controllato almeno l'Integer javadoc? Come pensi di convertire 12345656 in un valore esadecimale a 2 cifre? –

risposta

106
String.format("%02X", value); 

Se si utilizza invece di Xxas suggested by aristar, allora non c'è bisogno di usare .toUpperCase().

+7

Questa è la migliore risposta al momento. –

+0

Concordato che questo è molto meglio di tutti gli altri. Funziona perfettamente. L'unica cosa che suggerirei è un po 'più di descrizione dei parametri passati al metodo. Ho dovuto cercare se ho passato il valore come numero intero o come stringa esadecimale. – JRSofty

+0

La migliore soluzione! Il più breve e il più leggibile. Grazie: D – wassup

27
Integer.toHexString(42); 

Javadoc: http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toHexString(int)

Nota che questo può dare più di 2 cifre, però! (Un numero intero è di 4 byte, quindi potresti potenzialmente recuperare 8 caratteri.)

Ecco un po 'di trucco per ottenere il tuo padding, purché tu sia assolutamente sicuro che stai trattando solo con valori a byte singolo (255 o meno):

Integer.toHexString(0x100 | 42).substring(1) 

Molti altri (e migliori) soluzioni a Left padding integers (non-decimal format) with zeros in Java.

+2

Nice hack zero padding :) – Grodriguez

+0

È possibile utilizzare la stessa tecnica per valori più grandi. Se si desidera eseguire il padding per valori fino a 2 byte, è possibile eseguire Integer.toHexString (0x10000 | value) .substring (1). Per le cifre esadecimali N, aggiungi N 0 dopo "1". Naturalmente, il tuo valore esadecimale non deve contenere più di N cifre. – user823981

14

Utilizzare Integer.toHexString(). Non dimenticare di eseguire il pad con uno zero iniziale se si finisce con una sola cifra. Se il tuo numero intero è maggiore di 255 otterrai più di 2 cifre.

StringBuilder sb = new StringBuilder(); 
sb.append(Integer.toHexString(myInt)); 
if (sb.length() < 2) { 
    sb.insert(0, '0'); // pad with leading zero if needed 
} 
String hex = sb.toString(); 
+1

L'uso di 'StringBuilder' è in realtà un miglioramento? http://pastebin.com/KyS06JMz –

3

Se avete solo bisogno di stampare loro provare questo:

for(int a = 0; a < 255; a++){ 
    if(a % 16 == 0){ 
     System.out.println(); 
    } 
    System.out.printf("%02x ", a); 
} 
23
String.format("%02X", (0xFF & value));  
+6

Qualcuno può spiegare perché questo sta facendo un po 'saggio e con 0xFF? Questo è il motivo per cui le risposte su SO non dovrebbero essere solo il codice –

+4

OxFF e il valore (byte) convertono solo il byte firmato in unsigned. (int) -1 = 0xFFFFFFFF, (int) (- 1 & 0xFf) = 0xFF – aristar

+0

In questo caso, il bit-wise e con 0xFF non è necessario a causa del formato "% 02X". –

Problemi correlati