在二进制和 ASCII 之间转换
提供的代码使用归约 lambda 函数将字符串转换为二进制。然而,将二进制转换回 ASCII 的方法并不是立即显而易见的。
Python 2(对于 ASCII 字符)
对于 [ -~] 范围内的 ASCII 字符,Python 2 提供了一个简单的解决方案:
import binascii bin(int(binascii.hexlify('hello'), 16)) # Output: '0b110100001100101011011000110110001101111'
反转流程:
n = int('0b110100001100101011011000110110001101111', 2) binascii.unhexlify('%x' % n) # Output: 'hello'
Python 3(所有 Unicode 字符)
Python 3 引入了对所有 Unicode 字符的支持。以下函数提供了统一的转换接口:
def text_to_bits(text): bits = bin(int.from_bytes(text.encode(), 'big'))[2:] return bits.zfill(8 * ((len(bits) + 7) // 8)) def text_from_bits(bits): n = int(bits, 2) return n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
Unicode-Aware Conversion
最后,为了兼容 Python 2 和 3,这里有一个单一源代码片段处理 Unicode 转换:
def text_to_bits(text): bits = bin(int(binascii.hexlify(text.encode()), 16))[2:] return bits.zfill(8 * ((len(bits) + 7) // 8)) def text_from_bits(bits): n = int(bits, 2) return int2bytes(n).decode() def int2bytes(i): hex_string = '%x' % i n = len(hex_string) return binascii.unhexlify(hex_string.zfill(n + (n & 1)))
以上是如何在Python中高效地在二进制和ASCII之间转换?的详细内容。更多信息请关注PHP中文网其他相关文章!