Convertir números binarios, octales y hexadecimales - Python avanzado - Capítulo 10


En este capítulo verás cómo crear una calculadora que transforme de binario o de octal o de hexadecimal a decimal y viceversa. Esta calculadora, será capaz de convertir también en base 32 por ejemplo, entre otras como la base 27 o la ternaria.

Bitwise o bit a bit, en español, se trata de operaciones de bajo nivel que pueden alteran las cadenas binarias a nivel de bit. Estas operaciones son realmente básicas y compatibles con la CPU. Estas pocas operaciones son necesarias para trabajar con drivers, criptografia, comunicaciónes de red, gráficos de bajo nivel, etc.
Veamos algunos ejemplos para que veas un poco cómo funciona.

Conversión de binario a decimal en Python

Escribamos el número 167 por poner algo en binario.

Código

print(int('10100111', 2))

Resultado

Nos devuelve el número en decimal:

167

Sabiendo cómo funcionan los cálculos de este tipo en Python, podemos construir una pequeña función para poder utilizarlo por ejemplo en una aplicación calculadora.

Crear una calculadora conversora de números en Python

Código

def convierte():
    numero = input('Introduce un número:\n')
    sistema = int(input('Introduce un sistema de conversión:\n'))
    print(int(numero, sistema))


convierte()

Resultado

Al llamar a esta función, nos devuelve el siguiente input:

Introduce un número:

Le introduces un número cualquiera.

101010111100001

Te pedirá que le introduzcas un sistema de conversión. Si es binario, un 2.

Introduce un sistema de conversión:
2

Finalmente, devuelve el resultado en decimal:

21985

Esta calculadora conversora funciona con otras conversiones, por ejemplo con números octales, hexadecimales, etc.

Transformemos un número hexadecimal en decimal.

Resultado

Simplemente, ejecuta el converso e introduce un número hexadecimal y el sistema 16.

Introduce un número:
67F
Introduce un sistema de conversión:
16
1663

Hagamos la conversión a la inversa.

Convertir números decimales en binarios con Python

Convertir de decimal a binario es muy fácil, solo tenemos que utilizar bin().

Código

def binario_decimal():
	numero = int(input('Introduce un número:\n'))
	convertido = bin(numero)
	print(convertido)


binario_decimal()

Resultado

El número decimal 77 devuelve el número 0b1001101, al cual le tienes que quitar el prefijo 0b.

Introduce un número:
77
0b1001101

¿Cómo podemos eliminar el 0b que devuelve el método bin?
Lo primero es pararse a analizar las cosas. Investigamos el tipo de dato que devuelve bin() para saber cómo debemos tratarlo:

Código

def binario_decimal():
	numero = int(input('Introduce un número:\n'))
	convertido = bin(numero)
	print(type(convertido))


binario_decimal()

Resultado

Probamos con cualquier número y nos dice que es de tipo string.

Introduce un número:
50
class 'str'

Una vez sabemos que el método bin() devuelve un string, podemos decirle que se almacene en la variable convertido a partir del tercer caracter hasta el final con los dos puntos. Recuerda siempre que se empieza a contar desde la posición cero.
Las posiciones del string: 0 = posición 0.
1 = b.
2 = Primer número binario.

Código

def binario_decimal():
	numero = int(input('Introduce un número:\n'))
	convertido = bin(numero)[2:]
	print(convertido)


binario_decimal()

Resultado

Ahora si, devuelve el binario sin el prefijo 0b y lo podrías transformar en integer para hacer cálculos con él.

Introduce un número:
60
111100

Convertir números decimales en octales con Python

También podemos crear un conversor de octal a decimal cambiando solo el bin() por el oct().

Código

def octal_decimal():
	numero = int(input('Introduce un número:\n'))
	convertido = oct(numero)[2:]
	print(convertido)


octal_decimal()

Resultado

Devuelve el número octal también sin el prefijo. En este caso 0o.

Introduce un número:
16
20

Convertir números decimales en octales con Python

Y para terminar el capítulo, veamos la conversion de decimal a hexadecimal.
Solo tienes que cambiar el oct() por hex().

Código

def hexadecimal_decimal():
	numero = int(input('Introduce un número:\n'))
	convertido = hex(numero)[2:]
	print(convertido)


hexadecimal_decimal()

Resultado

Devuelve el número hexadecimal también sin el prefijo. En este caso 0x.

Introduce un número:
700
2bc

Suscríbete a mi canal de YouTube para apoyarme

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.


Comentarios

Si te quedan dudas sobre el temario, sobre Python, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.