Binary To String/Text In Python
Answer :
It looks like you are trying to decode ASCII characters from a binary string representation (bit string) of each character.
You can take each block of eight characters (a byte), convert that to an integer, and then convert that to a character with chr()
:
>>> X = "0110100001101001" >>> print(chr(int(X[:8], 2))) h >>> print(chr(int(X[8:], 2))) i
Assuming that the values encoded in the string are ASCII this will give you the characters. You can generalise it like this:
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
If you want to keep it in the original encoding you don't need to decode any further. Usually you would convert the incoming string into a Python unicode string and that can be done like this (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)
To convert bits given as a "01"-string (binary digits) into the corresponding text in Python 3:
>>> bits = "0110100001101001" >>> n = int(bits, 2) >>> n.to_bytes((n.bit_length() + 7) // 8, 'big').decode() 'hi'
For Python 2/3 solution, see Convert binary to ASCII and vice versa.
Comments
Post a Comment