在没有第三方库的情况下使用 Python 自带函数解码
在没有第三方库的情况下使用 Python 自带函数解码二进制字符串
在数据处理和文件编码的领域,二进制字符串的解码是一项常见任务。虽然在 Python 中,有许多强大的第三方库可以帮助我们完成这一任务,但近期博主遇到了一些场景,无法调用这些库,为了下次再遇到方便,也为了减少依赖,我们希望仅使用 Python 的内置功能来实现二进制字符串到 ASCII 码的转换。
实现原理
二进制字符串是由 0
和 1
组成的,通常每 8 位二进制数(一个字节)可以对应一个 ASCII 字符。我们可以利用 Python 的内置函数和基本的字符串操作来完成这一转换。以下是实现步骤:
简单的实现代码:
binary_string = "01110111011101110111011100101110011010000110010101101100011011000110111101101100011010100110110100101110011000110110111101101101"
ascii_string = ''.join(chr(int(binary_string[i:i+8], 2)) for i in range(0, len(binary_string), 8))
print(ascii_string)
长期调用
- 截取有效的二进制字符串:确保输入的二进制字符串长度为 8 的倍数,以便能够完整地转换成字节。
- 切分二进制字符串:每 8 位一组,形成一个字节。
- 转换为 ASCII 字符:将每个字节的二进制形式转换为整数,再转换为对应的 ASCII 字符。
- 处理异常情况:如果输入的字符串中包含非二进制字符,使用正则表达式进行清理。
import redef binary(binary_string):"""此函数用于二进制文件转ascii码:param binary_string:用于接收用户的二进制字符串:return:None"""decoded_string = ""try:#binary_string = binary_string[:len(binary_string) // 8 * 8]binary_chunks = [binary_string[i:i+8] for i in range(0, len(binary_string), 8)]ascii_characters = [chr(int(chunk, 2)) for chunk in binary_chunks]decoded_string = "".join(ascii_characters)except Exception as a:binary_string = re.sub(r'[^01]', '', binary_string)binary_chunks = [binary_string[i:i+8] for i in range(0, len(binary_string), 8)]ascii_characters = [chr(int(chunk, 2)) for chunk in binary_chunks]decoded_string = "".join(ascii_characters)print("警告:输入的文本文件带有非二进制字符,已置换为空")finally:print(f"解码后的字符串:{decoded_string}")
十六进制同理
hex_chunks = [hex_string[i:i+2] for i in range(0,len(hex_string), 2)]
ascii_characters = [chr(int(i ,16)) for i in hex_chunks]
decoded_string = ''.join(ascii_characters)
print(decoded_string)
测试
hexstr("7777772e68656c6c6f6c6a6d2e636f6d")
binary("01110111011101110111011100101110011010000110010101101100011011000110111101101100011010100110110100101110011000110110111101101101")
得到结果:
www.helloljm.com
解码后的字符串:www.helloljm.com