Skip to content

Instantly share code, notes, and snippets.

@knkillname
Last active October 29, 2023 19:54
Show Gist options
  • Save knkillname/0b11dd63be2465e83c6d71d353ccb88b to your computer and use it in GitHub Desktop.
Save knkillname/0b11dd63be2465e83c6d71d353ccb88b to your computer and use it in GitHub Desktop.
Convertir texto a binario y viceversa.
# Autor: Mario Abarca
# Fecha: 29 nov. 2017
# Lenguaje: Python 3.6
from cmd import Cmd
class TextoBinarioApp(Cmd):
def __init__(mi):
super().__init__()
mi.codigo = 'utf8'
def do_codigo(mi, argumento):
'Fija el código (ascii, utf8, etc.) que se usa para '\
'codificar/decodificar.'
codigo = argumento.strip()
try:
bytearray('', codigo)
except LookupError:
print('**Código desconocido.')
else: mi.codigo = codigo
def do_codificar(mi, argumento):
'Codifica un texto en binario.'
try:
octetos = bytearray(argumento, mi.codigo)
except:
print(f'**No se puede codificar en {mi.codigo}.')
else: print(' '.join(f'{x:b}'.rjust(8, '0') for x in octetos))
def do_decodificar(mi, argumento):
'Decodifica un texto en binario.'
try:
octetos = bytearray(int(x, 2) for x in argumento.split())
except:
print('**No es una cadena binaria.')
return None
try:
print(octetos.decode(encoding=mi.codigo))
except: print(f'**No es una cadena codificada en {mi.codigo}')
def do_salir(mi, arg):
'Salir del programa.'
return True
app = TextoBinarioApp()
app.cmdloop()
@knkillname
Copy link
Author

Ejemplo de uso:

(Cmd) codigo latin1
(Cmd) codificar ñ
11110001
(Cmd) codigo ascii
(Cmd) codificar ñ
**No se puede codificar en ascii.
(Cmd) codigo utf8
(Cmd) codificar ¿Acaso no hablas español?
11000010 10111111 01000001 01100011 01100001 01110011 01101111 00100000 01101110 01101111 00100000 01101000 01100001 01100010 01101100 01100001 01110011 00100000 01100101 01110011 01110000 01100001 11000011 10110001 01101111 01101100 00111111
(Cmd) decodificar 11000010 10100001 01001110 01101111 00100000 01101100 01101111 00100000 01110011 11000011 10101001 00100001
¡No lo sé!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment