2011-12-31 23 views
59

Necesito cambiar un valor entero en un valor hexadecimal de 2 dígitos en Java. De alguna manera, esto es posible. GraciasEntero a dos dígitos hexadecimales en Java

Mi número más grande será 63 y el más pequeño será 0. Quiero un cero inicial para valores pequeños.

+0

¿Necesita imprimirlo? necesitas convertirlo en una cadena? –

+0

escribiré en un archivo como un hexágono de dos dígitos –

+0

¿Al menos ha verificado el Integer javadoc? ¿Cómo planeas convertir 12345656 a un valor hexadecimal de 2 dígitos? –

Respuesta

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

Si utiliza X en lugar de xas suggested by aristar, entonces no es necesario utilizar .toUpperCase().

+7

Esta es la mejor respuesta en la actualidad. –

+0

De acuerdo, este es mucho mejor que cualquiera de los demás. Funciona perfectamente Lo único que sugeriría es una pequeña descripción de los parámetros pasados ​​al método. Tenía que mirar hacia arriba si pasaba el valor como un número entero o como una cadena hexagonal. – JRSofty

+0

¡La mejor solución! El más corto y el más legible. Gracias: D – wassup

27
Integer.toHexString(42); 

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

Tenga en cuenta que esto puede darle más de 2 dígitos, sin embargo! (Un entero es de 4 bytes, por lo que podría recuperar 8 caracteres).

Aquí tiene algo de truco para obtener su relleno, siempre y cuando esté absolutamente seguro de que solo está tratando con valores de un solo byte (255 o menos):

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

Muchas de las soluciones más (y mejores) en Left padding integers (non-decimal format) with zeros in Java.

+2

Nice zero-padding hack :) – Grodriguez

+0

Puede usar la misma técnica para valores más grandes. Si desea relleno para valores de hasta 2 bytes, puede hacer Integer.toHexString (0x10000 | value) .substring (1). Para N dígitos hexagonales, añada N 0 después del "1". Por supuesto, su valor hexadecimal no debe tener más de N dígitos. – user823981

14

Use Integer.toHexString(). No te olvides de rellenar con un cero inicial si solo terminas con un dígito. Si su número entero es mayor que 255, obtendrá más de 2 dígitos.

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

¿El uso de 'StringBuilder' en realidad es una mejora? http://pastebin.com/KyS06JMz –

3

Si sólo tiene que imprimir Prueba esto:

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

¿Alguien puede explicar por qué esto está haciendo un poco sabio y con 0xFF? Esta es la razón por la cual las respuestas en SO no deberían ser simplemente el código –

+4

OxFF y (byte) value simplemente convierten el byte firmado en unsigned. (int) -1 = 0xFFFFFFFF, (int) (- 1 & 0xFf) = 0xFF – aristar

+0

En este caso, el bit a sabiendas y con 0xFF no es necesario debido al formato "% 02X". –

Cuestiones relacionadas