python

Python – Traductor binario a texto

En este post de programación en Python te mostraré un traductor de binario a texto y de texto a binario. Es decir, codificar de texto plano a binario, y de binario a texto plano.

Traductor binario texto en Python – Ejecución del código

Con esto podremos codificar y decodificar mensajes, ya sea proporcionando el texto plano para convertirlo a ceros y unos, o proporcionando la cadena de ceros y unos para transformarlo a texto plano.

Al terminar vamos a tener un traductor en Python capaz de traducir la cadena (por ejemplo) 01010000 01100001 01110010 01111010 01101001 01100010 01111001 01110100 01100101 en Parzibyte.

Algoritmo general

Primero veamos cómo convertir de texto a binario en Python. Una vez que tengamos el texto, lo recorremos letra por letra. Ahora obtenemos el valor ASCII de la letra, por ejemplo, para la letra A el valor es 65.

Una vez que tenemos el código ASCII de la letra como entero decimal, lo convertimos a binario. Esta conversión puede ser usando funciones nativas o métodos manuales.

Cuando tengamos el número binario, lo concatenamos al resultado (junto con un espacio o un separador). Y hacemos eso por cada letra.

Para el caso de convertir de binario a texto primero debemos convertir el texto codificado a un arreglo para tener cada letra codificada por separado (ahí el uso del separador). Después convertimos el binario a decimal y luego convertimos el ASCII obtenido al carácter correspondiente.

Finalmente vamos agregando ese carácter (ya sea una letra o un espacio) a la cadena del resultado.

Esto puede parecer muy complejo pero verás que será realmente fácil, ya que vamos a separar todo en funciones para tener un código ordenado y limpio.

Texto a binario en Python

Comencemos viendo cómo codificar el texto. Primero tenemos la función que convierte un carácter a su representación binaria:

def ascii_a_binario(letra):
    # Extraer su valor entero
    valor = ord(letra)
    # Convertirlo a binario
    return "{0:08b}".format(valor)

Estamos formateando las cadenas para que el binario resultante tenga ceros a la izquierda. Y luego invocamos a esa función desde la que codifica el texto completo:

def texto_a_binario(texto):
    texto_binario = ""  # El resultado
    contador = 0
    for letra in texto:
        texto_binario += ascii_a_binario(letra)
        # Agregar un espacio entre binarios, excepto si es el último carácter
        if contador + 1 < len(texto):
            texto_binario += separador
        contador += 1
    return texto_binario

De este modo llegamos a la mitad de este tutorial. Ahora vamos a ver la segunda parte que es decodificar, o mejor dicho, convertir el binario a texto plano.

Binario a texto

Ya expliqué anteriormente el algoritmo así que vamos directo al código fuente. Primero veamos cómo convertir un binario a su carácter correspondiente:

def binario_a_ascii(binario):
    # Convertir binario a decimal
    valor = int(binario, 2)
    # Convertir el decimal a su representación ASCII
    return chr(valor)

Después invocamos a esa función por cada binario que haya en la cadena codificada:

def binario_a_texto(texto_binario):
    texto_plano = ""
    for binario in texto_binario.split(separador):
        texto_plano += binario_a_ascii(binario)
    return texto_plan

Modo de uso

Traductor binario texto en Python – Ejecución del código

Ahora te enseñaré cómo usar el traductor con un sencillo ejemplo:

"""
    Modo de uso
"""

texto_original = "Parzibyte"
texto_codificado = texto_a_binario(texto_original)
print(f"El texto '{texto_original}' es '{texto_codificado}' en binario")
# Decodificar
original = binario_a_texto(texto_codificado)
print(f"El texto binario '{texto_codificado}' es '{original}'")

La salida la puedes ver en la imagen anterior. Obviamente este código puede venir de cualquier lugar… venir de un archivo, de lo que el usuario escriba, de una petición http, etcétera.

Poniendo todo junto

Hemos visto las dos partes de este traductor binario a texto; vimos cómo codificar y cómo decodificar. Es momento de mostrarte el código completo, mismo que queda así:

"""

  ____          _____               _ _           _       
 |  _ \        |  __ \             (_) |         | |      
 | |_) |_   _  | |__) |_ _ _ __ _____| |__  _   _| |_ ___ 
 |  _ <| | | | |  ___/ _` | '__|_  / | '_ \| | | | __/ _ \
 | |_) | |_| | | |  | (_| | |   / /| | |_) | |_| | ||  __/
 |____/ \__, | |_|   \__,_|_|  /___|_|_.__/ \__, |\__\___|
         __/ |                               __/ |        
        |___/                               |___/         
    
____________________________________
/ Si necesitas ayuda, contáctame en \
\ https://parzibyte.me               /
 ------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
Creado por Parzibyte (https://parzibyte.me).
------------------------------------------------------------------------------------------------
            | IMPORTANTE |
Si vas a borrar este encabezado, considera:
Seguirme: https://parzibyte.me/blog/sigueme/
Y compartir mi blog con tus amigos
También tengo canal de YouTube: https://www.youtube.com/channel/UCroP4BTWjfM0CkGB6AFUoBg?sub_confirmation=1
Twitter: https://twitter.com/parzibyte
Facebook: https://facebook.com/parzibyte.fanpage
Instagram: https://instagram.com/parzibyte
Hacer una donación vía PayPal: https://paypal.me/LuisCabreraBenito
------------------------------------------------------------------------------------------------
"""
separador = " "  # Necesitamos un separador para cuando decodifiquemos esto


def ascii_a_binario(letra):
    # Extraer su valor entero
    valor = ord(letra)
    # Convertirlo a binario
    return "{0:08b}".format(valor)


def binario_a_ascii(binario):
    # Convertir binario a decimal
    valor = int(binario, 2)
    # Convertir el decimal a su representación ASCII
    return chr(valor)


def texto_a_binario(texto):
    texto_binario = ""  # El resultado
    contador = 0
    for letra in texto:
        texto_binario += ascii_a_binario(letra)
        # Agregar un espacio entre binarios, excepto si es el último carácter
        if contador + 1 < len(texto):
            texto_binario += separador
        contador += 1
    return texto_binario


def binario_a_texto(texto_binario):
    texto_plano = ""
    for binario in texto_binario.split(separador):
        texto_plano += binario_a_ascii(binario)
    return texto_plano


"""
    Modo de uso
"""

texto_original = "Parzibyte"
texto_codificado = texto_a_binario(texto_original)
print(f"El texto '{texto_original}' es '{texto_codificado}' en binario")
# Decodificar
original = binario_a_texto(texto_codificado)
print(f"El texto binario '{texto_codificado}' es '{original}'")

Para terminar, te dejo con más tutoriales de Python.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

3 días hace

Esta web usa cookies.