首页 >后端开发 >Python教程 >如何在Python中高效地进行二进制和ASCII(包括Unicode)之间的转换?

如何在Python中高效地进行二进制和ASCII(包括Unicode)之间的转换?

Susan Sarandon
Susan Sarandon原创
2024-11-26 05:35:11456浏览

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