当前位置: 首页 > news >正文

在没有第三方库的情况下使用 Python 自带函数解码

在没有第三方库的情况下使用 Python 自带函数解码二进制字符串

在数据处理和文件编码的领域,二进制字符串的解码是一项常见任务。虽然在 Python 中,有许多强大的第三方库可以帮助我们完成这一任务,但近期博主遇到了一些场景,无法调用这些库,为了下次再遇到方便,也为了减少依赖,我们希望仅使用 Python 的内置功能来实现二进制字符串到 ASCII 码的转换。

实现原理

二进制字符串是由 01 组成的,通常每 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)

长期调用

  1. 截取有效的二进制字符串:确保输入的二进制字符串长度为 8 的倍数,以便能够完整地转换成字节。
  2. 切分二进制字符串:每 8 位一组,形成一个字节。
  3. 转换为 ASCII 字符:将每个字节的二进制形式转换为整数,再转换为对应的 ASCII 字符。
  4. 处理异常情况:如果输入的字符串中包含非二进制字符,使用正则表达式进行清理。
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

相关文章:

  • 3.串口通信之SPI
  • Java学习手册:Java内存模型
  • 22、字节与字符的概念以及二者有什么区别?
  • 【Python爬虫基础篇】--1.基础概念
  • MCP Server和Client的基本使用方法
  • halcon模板匹配(八)alignment_for_ocr_in_semiconductor
  • OCR:开启文档抽取的智能变革之门
  • 4.16 AT好题选做
  • 探索关系型数据库 MySQL
  • LFI to RCE
  • DiffuRec: A Diffusion Model for Sequential Recommendation
  • 将二进制的stl文件转换为ascii的形式
  • stm32F103、GD32F103读写Nor Flash实战指南
  • 吉利矩阵(DFS)
  • [AI]浅谈大模型应用开发的认知构建
  • ecovadis审核有什么原则?什么是ecovadis审核,有什么意义
  • 递归函数详解
  • Langchain-构建向量数据库和检索器
  • 【APM】NET Traces, Metrics and Logs to OLTP
  • 期货数据API对接实战指南
  • 体坛联播|利物浦提前4轮夺冠,安切洛蒂已向皇马更衣室告别
  • 五一假期“热潮”来袭,计划南下的小伙伴注意了
  • 大家聊中国式现代化|邓智团:践行人民城市理念,开创人民城市建设新局面
  • 准“90后”山西壶关县委常委、副县长高雅亭赴北京密云挂职
  • 龚曙光:散文家永远只有一个视角,就是“我与时代”
  • 商务部:已有超1.2亿人次享受到以旧换新补贴优惠