在 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 及更高版本中,位元組類型提供了額外的便利性:
bin(int.from_bytes('hello'.encode(), 'big'))
用來轉換回字串:
n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
要支援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中文網其他相關文章!