如何在Python中实现文本与8位二进制(扩展ASCII)的互转?
文本与8位二进制(扩展ASCII)互转解决方案
文本转8位二进制
你只需要修改格式化字符串的规则,把原来的"{0:b}"改成"{0:08b}"——这里的08表示输出的二进制字符串固定为8位,不足的话在前面补零。同时为了支持扩展ASCII(字符范围0-255),编码时建议用latin-1而非ascii,避免遇到非标准ASCII字符时报错。
示例代码:
text = 'text' # 用latin-1编码支持扩展ASCII(0-255范围的字符) text_bytes = bytes(text, 'latin-1') # 格式化每个字节为8位二进制,用空格分隔 binary_str = ' '.join(["{0:08b}".format(byte) for byte in text_bytes]) print(binary_str)
运行后输出:
01110100 01100101 01110011 01110100
8位二进制转回文本
针对拆分后的8位二进制字符串,按空格分割后逐个转成整数,再组合成字节对象,最后用latin-1解码回文本,就能完美兼容扩展ASCII字符:
示例代码:
binary_str = '01110100 01100101 01110011 01110100' # 按空格拆分二进制字符串,转成整数列表 byte_list = [int(bin_part, 2) for bin_part in binary_str.split()] # 转成字节对象后解码 text = bytes(byte_list).decode('latin-1') print(text)
运行后输出:
text
封装成函数(方便复用)
如果需要频繁使用,可以封装成两个函数:
def text_to_8bit_binary(text): text_bytes = bytes(text, 'latin-1') return ' '.join(["{0:08b}".format(byte) for byte in text_bytes]) def eightbit_binary_to_text(binary_str): byte_list = [int(bin_part, 2) for bin_part in binary_str.split()] return bytes(byte_list).decode('latin-1') # 测试 test_text = 'Hello! 扩展ASCII测试: ñ' binary = text_to_8bit_binary(test_text) print("二进制:", binary) recovered_text = eightbit_binary_to_text(binary) print("转回文本:", recovered_text)
这样不管是标准ASCII还是扩展ASCII字符,都能正确完成互转,且操作简洁,不会出现手动补零后转回麻烦的问题。
内容的提问来源于stack exchange,提问作者JoelTech43
相关产品推荐
相关产品推荐

