首頁 >後端開發 >Python教學 >如何在Python中有效率地進行二進位和ASCII(包括Unicode)之間的轉換?

如何在Python中有效率地進行二進位和ASCII(包括Unicode)之間的轉換?

Susan Sarandon
Susan Sarandon原創
2024-11-26 05:35:11496瀏覽

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

將二進位轉換為 ASCII 以及反之亦然

在 Python 中,將字串轉換為其二進位表示形式非常簡單。使用reduce()、lambda、ord() 和bin() 的組合,可以得到字串的二進位等價物。但是,這種方法需要手動進行字串拼接並對應到對應的 ASCII 值。

更簡單的轉換方法

對於Python 2,可以使用binascii 模組提供更簡潔的方法:

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

該方法將[-~範圍內的ASCII字元進行轉換,與原始碼類似。用於轉換回字串:

binascii.unhexlify('%x' % n)

Python 3.2 增強功能

在Python 3.2 及更高版本中,位元組類型提供了額外的便利性:

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

用來轉換回字串:

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

Python 中的Unicode支援3

要支援Python 3 中的所有Unicode 字符,可以使用以下函數:

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)))
'

對於Python 2/3 相容性:

使用這些函數,在Python 2 和Python 3 中二進位和Unicode 字串之間的轉換變得毫不費力。

以上是如何在Python中有效率地進行二進位和ASCII(包括Unicode)之間的轉換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn