Cómo convertir decimal a hexadecimal con Python

El sistema decimal es el más empleado para representar valores numéricos, no obstante, sabemos que no es el único, ya que existen otros sistemas como el binario, octal, hexadecimal…etc. Por suerte, en python contamos con buenas herramientas para trabajar con dichos formatos.

En el presente artículo vamos a ver un sencillo programa (cuyo código completo podéis ver en el enlace que dejo al final de este artículo) capaz de traducir valores en formato decimal a sistema hexadecimal (conformado por los números del 0 al 9 y los primeros 6 caracteres del alfabeto latino), para luego, aplicar dicho programa a la traducción de texto a hexadecimal.

Antes de ver nuestro conversor decimal-hexadecimal conviene conocer primero el método para realizar dicha conversión de modo manual. Para ello podemos echar mano de este video de Mclases,  en el que se explica dicho proceso:

Este es el método que va a emplear nuestro programa para convertir nuestro decimal al sistema hexadecimal:

Como se ve en la imagen sobre estas líneas, lo primero que hacemos es importar los módulos «subprocess» (para limpieza de consola) y las funciones «OKI» y «ns» del módulo de creación propia «VALID» (cuya función explicaré cuando vayamos a usarlas).

CONVERSOR PARA VALORES NUMÉRICOS:

Para la conversión, emplearemos dos funciones, siendo la primera de ellas la función «DecimalAHexadecimal» la cual empezará pidiendo al usuario, que introduzca el valor numérico que quiere convertir al formato hexadecimal. Dado que para realizar la conversión, es necesario realizar operaciones aritméticas con dicho valor, este tendrá que ser un entero, con lo que aplicaremos la función «int» al correspondiente input, como se ve en la imagen.

No obstante, hecho así, si nuestro usuario introdujese una entrada no numérica se produciría un error, al no poder llevarse a cabo la conversión al formato «int». Para evitar esta eventualidad aplicaremos en lugar de la función «int», otra función contenida en «VALID» (función «OKI») la cual se encargará de admitir en el input, solo valores numéricos, dicha función «OKI» sería la siguiente:

Por su parte, creamos también la variable «hexadecimal» en la que se irá añadiendo el resultado. Como se ve en el video, para hallar el hexadecimal de nuestro número tenemos que ir dividiendo sucesivamente nuestro número por 16 (la base del sistema hexadecimal) extrayendo de dicha operación el resto (que en python se calcula mediante el símbolo «%»):

Como se ve en la imagen, en cada ejecución de este ciclo se va a aplicar una nueva función (de nombre «CambiarDigitos») la cual, tomará como argumento el referido resto el cual, si es menor de 10, se incluirá tal cual en la variable «hexadecimal», mientras que si se trata de un resto comprendido entre 10 y 15, será sustituido por el correspondiente de los caracteres («A», «B», «D», «E» o «F») especificados en la lista «hexadecimal»:

Tras cada ejecución de la función «CambiarDigitos», ocurrida dentro de la función «DecimalAHexadecimal», el valor actual de «decimal» se dividirá por 16. Este proceso se irá repitiendo mientras que el valor de «decimal» sea distinto de 0. De modo que cuando este ciclo finalice, la función procederá a imprimir el resultado que se habrá ido añadiendo a la variable «hexadecimal»:

Con todo ello, tendríamos elaborado nuestro programa para convertir valores decimales a hexadecimal. Así, si quisiéramos saber el hexadecimal de 1987:

Obtendríamos el valor 7C3. Tras ello usaremos una variable de nombre «conti» para preguntar a nuestro usuario si desea continuar con la ejecución del programa. Pregunta ante la que solo podrá contestar «s» para «si» o «n» para «no». Para asegurarnos de que solo se introduce uno de tales caracteres,usaremos la función «ns» de nuestro «VALID»:

De modo que si introducimos «s», la función «subprocess» limpiara la pantalla dejando el programa listo para una nueva ejecución. Mientras que si lo que introducimos es «n», la ejecución del mismo se interrumpirá mediante la correspondiente sentencia «break».

CONVERSOR PARA ENTRADAS DE TEXTO:

Como adelantamos en su momento, lo que hemos hecho para valores numéricos, podemos hacerlo también con texto. Es decir, podemos convertir una cadena de texto al formato hexadecimal. Esto lo haremos convirtiendo a hexadecimal el ordinal correspondiente a cada uno de los caracteres que compongan nuestro texto:

Así, como se puede ver, tras pedirle el texto al usuario, creamos una variable («junt») en donde se irá añadiendo el valor hexadecimal correspondiente al ordinal del carácter que la variable «i» irá adoptando en su recorrido por el texto introducido (variable «lista_texto»).

Dicho valor hexadecimal se irá obteniendo mediante la aplicación de la función «DecimalAhexadecimal» que veíamos más arriba, con la diferencia de que, en esta ocasión, tomará un argumento que no es otro que el referido ordinal del carácter a convertir y que en nuestra función recibirá l nombre de «num»:

De este modo tendríamos un programa que, introducido un texto por el usuario, nos devuelve una cadena de caracteres hexadecimales:

Tras ello volveremos a hacer uso de la variable «conti» para hacerle elegir a nuestro hipotético usuario, entre la continuación de la ejecución del programa o su terminación.

-> Los dos programas y el módulo «VALID» aquí referidos pueden verse en el siguiente enlace a «Github»:

https://github.com/antonioam82/decim-to-hexa

Si tienes cualquier duda escríbela más abajo en comentarios.¡Saludos!

 

Antonio Alfonso MartínezProgramador y desarrollador autodidacta. Semanalmente publica en el blog El programador Chapuzas (wordpress) y también colaboro en las páginas “Código Comentado” y “Algoritmos MathPy” de Facebook.

 

Si quieres formar parte de la comunidad JustCodeIt, compartiendo información relevante sobre desarrollo Web, Mobile, Big Data o Blockchain puedes escribirnos a [email protected] .



Share this:

Leave a comment