En este post veremos cómo convertir un número decimal a su representación hexadecimal en Java. Es decir, convertir de base 10 a base 16.
En un post anterior vimos cómo convertir hexadecimal a decimal en Java, ahora haremos lo contrario y veremos dos maneras de hacerlo: con un algoritmo propio y con una función que ya viene integrada.
2 maneras de convertir decimal a hexadecimal en Java
El método que ya viene incorporado se invoca con Integer.toHexString, devuelve una cadena que contiene el número hexadecimal. Se usa así:
String hexadecimal = Integer.toHexString(númeroDecimal);
En los ejemplos lo veremos de forma más clara.
El segundo método es escrito por mí, lo que se hace es ir dividiendo el número decimal entre 16 y obtener además el residuo. Dependiendo del residuo se agrega el carácter, es decir, si el residuo es 0 se agrega 0, si el residuo es 10 se agrega una A, etcétera.
Convertir decimal a hexadecimal en Java
Veamos el método manual del que estaba hablando. Recibe un número entero y devuelve uno en base 16. Lo que se hace es un ciclo que se romperá cuando el decimal sea 0 o menor a 0, eso se logrará en algún momento ya que se divide entre 16.
public static String decimalAHexadecimal(int decimal) {
String hexadecimal = "";
String caracteresHexadecimales = "0123456789abcdef";
while (decimal > 0) {
int residuo = decimal % 16;
hexadecimal = caracteresHexadecimales.charAt(residuo) + hexadecimal; // Agregar a la izquierda
decimal /= 16;
}
return hexadecimal;
}
El residuo es un índice perfecto para obtener el carácter de la cadena que tiene todos los símbolos hexadecimales. Como ves, el símbolo se agrega al inicio de la cadena hexadecimal, y no al final.
Poniendo todo junto
Aquí dejo la demostración y el ejemplo de uso de las funciones.
/*
____ _____ _ _ _
| _ \ | __ \ (_) | | |
| |_) |_ _ | |__) |_ _ _ __ _____| |__ _ _| |_ ___
| _ <| | | | | ___/ _` | '__|_ / | '_ \| | | | __/ _ \
| |_) | |_| | | | | (_| | | / /| | |_) | |_| | || __/
|____/ \__, | |_| \__,_|_| /___|_|_.__/ \__, |\__\___|
__/ | __/ |
|___/ |___/
Blog: https://parzibyte.me/blog
Ayuda: https://parzibyte.me/blog/contrataciones-ayuda/
Contacto: https://parzibyte.me/blog/contacto/
Copyright (c) 2020 Luis Cabrera Benito
Licenciado bajo la licencia MIT
El texto de arriba debe ser incluido en cualquier redistribucion
*/
public class Main {
public static void main(String[] args) {
int decimales[] = { 16777215, 12, 21 };
for (int decimal : decimales) {
String hexadecimal = Integer.toHexString(decimal);
System.out.printf("Usando Integer.toHexString el decimal %d es %s\n", decimal, hexadecimal);
hexadecimal = decimalAHexadecimal(decimal);
System.out.printf("Usando decimalAHexadecimal el decimal %d es %s\n", decimal, hexadecimal);
}
}
public static String decimalAHexadecimal(int decimal) {
String hexadecimal = "";
String caracteresHexadecimales = "0123456789abcdef";
while (decimal > 0) {
int residuo = decimal % 16;
hexadecimal = caracteresHexadecimales.charAt(residuo) + hexadecimal; // Agregar a la izquierda
decimal /= 16;
}
return hexadecimal;
}
}
Al ejecutarlo ya sea por consola o con NetBeans el resultado es:
Ambos métodos tienen el mismo resultado, por lo que la función escrita “manualmente” es correcta. De igual modo puedes comprobarlo en este conversor de números online.
Te invito a leer más sobre Java en mi blog.