Solución:
Parece que está intentando decodificar caracteres ASCII a partir de una representación de cadena binaria (cadena de bits) de cada carácter.
Puede tomar cada bloque de ocho caracteres (un byte), convertirlo en un número entero y luego convertirlo en un carácter con chr()
:
>>> X = "0110100001101001"
>>> print(chr(int(X[:8], 2)))
h
>>> print(chr(int(X[8:], 2)))
i
Suponiendo que los valores codificados en la cadena son ASCII, esto le dará los caracteres. Puedes generalizarlo así:
def decode_binary_string(s):
return ''.join(chr(int(s[i*8:i*8+8],2)) for i in range(len(s)//8))
>>> decode_binary_string(X)
hi
Si desea mantenerlo en la codificación original, no necesita descodificar más. Por lo general, convertiría la cadena entrante en un Python Unicode string y eso se puede hacer así (Python 2):
def decode_binary_string(s, encoding='UTF-8'):
byte_string = ''.join(chr(int(s[i*8:i*8+8],2)) for i in range(len(s)//8))
return byte_string.decode(encoding)
Para convertir los bits dados como una cadena “01” (dígitos binarios) en el texto correspondiente en Python 3:
>>> bits = "0110100001101001"
>>> n = int(bits, 2)
>>> n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
'hi'
Para la solución Python 2/3, consulte Convertir binario a ASCII y viceversa.