Files
2026-03-29 19:58:27 -04:00

40 lines
945 B
Python

from text_codecs.register import register_codec
from easybits import Bits
import string
chars = string.ascii_uppercase + " "
char_to_num = {c: i for i, c in enumerate(chars)}
num_to_char = {i: c for i, c in enumerate(chars)}
def encode(text):
text = text.upper()
result = Bits()
for ch in text:
if ch in char_to_num:
num = char_to_num[ch]
b = Bits(format(num, "05b"))
result = result.concat(b)
while len(result) % 8 != 0:
result = result.concat(Bits('0'))
return result.bytes
def decode(data):
bits = Bits(data)
text = ""
for i in range(0, len(bits), 5):
chunk = bits[i:i+5]
if len(chunk) < 5:
break
num = int(str(chunk), 2)
if num in num_to_char:
text += num_to_char[num]
return text
register_codec(encode, decode, "ascii5")