Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Menukar Antara Binari dan ASCII (Termasuk Unicode) dengan Cekap dalam Python?

Bagaimanakah Saya Boleh Menukar Antara Binari dan ASCII (Termasuk Unicode) dengan Cekap dalam Python?

Susan Sarandon
Susan Sarandonasal
2024-11-26 05:35:11435semak imbas

How Can I Efficiently Convert Between Binary and ASCII (Including Unicode) in Python?

Menukar Binari kepada ASCII dan Sebaliknya

Dalam Python, menukar rentetan kepada perwakilan binarinya adalah mudah. Menggunakan gabungan reduce(), lambda, ord(), dan bin(), persamaan binari rentetan boleh diperolehi. Walau bagaimanapun, pendekatan ini memerlukan penyambungan rentetan manual dan pemetaan kepada nilai ASCII yang sepadan.

Kaedah Penukaran Lebih Mudah

Untuk Python 2, kaedah yang lebih ringkas tersedia menggunakan modul binasci:

import binascii
bin(int(binascii.hexlify('hello'), 16))

Kaedah ini menukar aksara ASCII dalam julat [-~, serupa dengan kod asal. Untuk penukaran kembali kepada rentetan:

binascii.unhexlify('%x' % n)

Penambahbaikan Python 3.2

Dalam Python 3.2 dan ke atas, jenis bait menawarkan kemudahan tambahan:

bin(int.from_bytes('hello'.encode(), 'big'))

Untuk penukaran kembali kepada rentetan:

n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()

Sokongan Unikod dalam Python 3

Untuk menyokong semua aksara Unicode dalam Python 3, fungsi berikut boleh digunakan:

def text_to_bits(text, encoding='utf-8', errors='surrogatepass'):
    bits = bin(int.from_bytes(text.encode(encoding, errors), 'big'))[2:]
    return bits.zfill(8 * ((len(bits) + 7) // 8))

def text_from_bits(bits, encoding='utf-8', errors='surrogatepass'):
    n = int(bits, 2)
    return n.to_bytes((n.bit_length() + 7) // 8, 'big').decode(encoding, errors) or '<pre class="brush:php;toolbar:false">import binascii

def text_to_bits(text, encoding='utf-8', errors='surrogatepass'):
    bits = bin(int(binascii.hexlify(text.encode(encoding, errors)), 16))[2:]
    return bits.zfill(8 * ((len(bits) + 7) // 8))

def text_from_bits(bits, encoding='utf-8', errors='surrogatepass'):
    n = int(bits, 2)
    return int2bytes(n).decode(encoding, errors)

def int2bytes(i):
    hex_string = '%x' % i
    n = len(hex_string)
    return binascii.unhexlify(hex_string.zfill(n + (n & 1)))
'

Untuk keserasian Python 2/3:

Dengan ini fungsi, menukar antara rentetan binari dan Unicode menjadi mudah dalam kedua-dua Python 2 dan Python 3.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Antara Binari dan ASCII (Termasuk Unicode) dengan Cekap dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn