Entero a hexadecimal de dos dígitos en Java


82

Necesito cambiar un valor entero en un valor hexadecimal de 2 dígitos en Java. ¿Hay alguna forma de hacerlo? Gracias

Mi mayor número será 63 y el menor será 0. Quiero un cero a la izquierda para valores pequeños.


¿Necesitas imprimirlo? ¿Necesitas convertirlo en una cuerda?
— Ahmed Masud

Escribiré en el archivo como hexadecimal de dos dígitos
— Salih Erikci

¿Ha comprobado al menos el javadoc Integer? ¿Cómo planea convertir 12345656 a un valor hexadecimal de 2 dígitos?
— JB Nizet

Respuestas:


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

Si usa en Xlugar de x lo sugerido por aristar , entonces no necesita usar .toUpperCase().


8
Esta es la mejor respuesta en la actualidad.
— David J.

1
De acuerdo, este es mucho mejor que cualquiera de los demás. Funciona perfectamente. Lo único que sugeriría es una descripción un poco más de los parámetros pasados ​​al método. Tuve que buscar si pasaba el valor como un número entero o como una cadena hexadecimal.
— JRSofty

31
Integer.toHexString(42);

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

Sin embargo, tenga en cuenta que esto puede proporcionarle más de 2 dígitos. (Un entero tiene 4 bytes, por lo que potencialmente podría recuperar 8 caracteres).

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

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

Muchas más (y mejores) soluciones en el relleno izquierdo de enteros (formato no decimal) con ceros en Java .


3
Buen truco de zero padding :)
— Grodriguez

1
Puede utilizar 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 hexadecimales, agrega N 0 después del "1". Por supuesto, su valor hexadecimal no debe tener más de N dígitos.
— user823981

28
String.format("%02X", (0xFF & value));    

7
¿Alguien puede explicar por qué esto funciona de forma bit a bit y con 0xFF? Es por eso que las respuestas en SO no deberían ser solo el código
— Stealth Rabbi

4
El valor OxFF & (byte) simplemente convierte el byte firmado en sin firmar. (int) -1 = 0xFFFFFFFF, (int) (- 1 y 0xFf) = 0xFF
— aristar

En este caso, el bit a bit y con 0xFF no es necesario debido al formato "% 02X".
— Freek de Bruijn

1
El especificador% 02X especifica un mínimo de dos dígitos. Si desea exactamente dos dígitos (descartando bits más altos), entonces necesita el bit a bit y.
— Plugwash

Es bueno saberlo, ¡gracias por esta información adicional!
— tryp

14

Utilice Integer.toHexString(). No olvide rellenar con un cero a la izquierda si solo termina 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();

2
¿Es el uso de StringBuilderrealmente una mejora? pastebin.com/KyS06JMz
— acaba de leer el

4

Si solo necesita imprimirlos, intente esto:

for(int a = 0; a < 255; a++){
    if( a % 16 == 0){
        System.out.println();
    }
    System.out.printf("%02x ", a);
}

0

uso esto para obtener una cadena que representa el valor hexadecimal equivalente de un número entero separado por espacio para cada byte EX: valor hexadecimal de 260 en 4 bytes = 00 00 01 04

    public static String getHexValString(Integer val, int bytePercision){
    StringBuilder sb = new StringBuilder();
    sb.append(Integer.toHexString(val));

    while(sb.length() < bytePercision*2){
        sb.insert(0,'0');// pad with leading zero
    }

    int l = sb.length(); // total string length before spaces
    int r = l/2; //num of rquired iterations

    for (int i=1; i < r;  i++){
        int x = l-(2*i); //space postion
        sb.insert(x, ' ');
    }
    return sb.toString().toUpperCase();         
}

public static void main(String []args){
    System.out.println("hex val of 260 in 4 bytes = " + getHexValString(260,4));
}

0

Según GabrielOshiro, si desea un formato entero de longitud 8, intente esto

String.format("0x%08X", 20) //print 0x00000014
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.