it-swarm.asia

Biner ke String/Teks dengan Python

Saya telah mencari berkali-kali secara online dan saya belum dapat menemukan cara untuk mengkonversi variabel string biner saya,X

X = "1000100100010110001101000001101010110011001010100"

menjadi nilai string UTF-8.

Saya telah menemukan bahwa beberapa orang menggunakan metode seperti

b'message'.decode('utf-8')

namun, metode ini tidak berfungsi untuk saya, karena 'b' dikatakan tidak ada, dan saya tidak yakin bagaimana cara mengganti 'pesan' dengan variabel. Tidak hanya, tetapi saya belum dapat memahami cara kerja metode ini. Apakah ada alternatif yang lebih baik?

Jadi bagaimana saya bisa mengkonversi string biner menjadi string teks?

EDIT: Saya juga tidak keberatan decoding ASCII

KLARIFIKASI: Inilah yang ingin saya wujudkan.

def binaryToText(z):
    # Some code to convert binary to text
    return (something here);
X="0110100001101001"
print binaryToText(X)

Ini kemudian akan menghasilkan string ...

hi

Terima kasih, Daniel

5
Dan

Sepertinya Anda sedang mencoba mendekode karakter ASCII dari representasi string biner (bit string) dari setiap karakter.

Anda dapat mengambil setiap blok yang terdiri dari delapan karakter (satu byte), mengonversinya menjadi integer, dan kemudian mengonversinya menjadi karakter dengan chr():

>>> X = "0110100001101001"
>>> print(chr(int(X[:8], 2)))
h
>>> print(chr(int(X[8:], 2)))
i

Dengan asumsi bahwa nilai-nilai yang dikodekan dalam string adalah ASCII ini akan memberi Anda karakter. Anda dapat menggeneralisasi seperti ini:

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

Jika Anda ingin menyimpannya dalam pengkodean asli, Anda tidak perlu mendekode lebih jauh. Biasanya Anda akan mengonversi string yang masuk menjadi string Python unicode dan itu bisa dilakukan seperti ini (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)
2
mhawke

Berikan argumen dasar opsional untuk int untuk mengonversi:

>> x = "1000100100010110001101000001101010110011001010100"
>> int(x, 2)
301456912901716
1
souldeux

Untuk mengonversi bit yang diberikan sebagai "01" -string (digit biner) menjadi teks yang sesuai dengan Python 3:

>>> bits = "0110100001101001"
>>> n = int(bits, 2)
>>> n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
'hi'

Untuk solusi Python 2/3, lihat Konversi biner ke ASCII dan sebaliknya .

1
jfs

Dalam Python 2, string (byte) yang dikodekan ascii juga merupakan string (byte) yang dikodekan utf8 ..__ Dalam Python 3, string (unicode) harus dikodekan ke byte yang dikodekan utf8. Contoh decoding salah arah.

>>> X = "1000100100010110001101000001101010110011001010100"
>>> X.encode()
b'1000100100010110001101000001101010110011001010100'

String yang hanya berisi digit '0' dan '1' adalah kasus khusus dan aturan yang sama berlaku.

1
Terry Jan Reedy