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

在没有第三方库的情况下使用 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

http://www.xdnf.cn/news/76.html

相关文章:

  • 递归函数详解
  • 力扣刷题-热题100题-第35题(c++、python)
  • StarRocks Community Monthly Newsletter (Mar)
  • nginx-基础知识(一)
  • 深度学习 从入门到精通 day_02
  • 【2025“华中杯”大学生数学建模挑战赛】选题分析 A题 详细解题思路
  • docker占用磁盘100%
  • [MySQL数据库] InnoDB存储引擎(三): 内存结构详解
  • 【Leetcode 每日一题 - 补卡】1534. 统计好三元组
  • NLP高频面试题(四十七)——探讨Transformer中的注意力机制:MHA、MQA与GQA
  • golang处理时间的包time一次性全面了解
  • 函数递归:递归的概念
  • 实现定时发送邮件,以及时间同步
  • 【口腔粘膜鳞状细胞癌】文献阅读3
  • 《前端性能优化秘籍:打造极致用户体验》
  • Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(四)
  • Linux之 grep、find、ls、wc 命令
  • Sentinel源码—4.FlowSlot实现流控的原理二
  • 【NLP 64、基于LLM的垂直领域【特定领域】问答方案】
  • kotlin + spirngboot3 + spring security6 配置登录与JWT
  • 【安卓开发】【Android Studio】Menu(菜单栏)的使用及常见问题
  • 【HDFS入门】HDFS与Hadoop生态的深度集成:与YARN、MapReduce和Hive的协同工作原理
  • 观察者设计模式详解:解耦通知机制的利器
  • 16-算法打卡-哈希表-两个数组的交集-leetcode(349)-第十六天
  • Flutter 常用命令
  • Qt GUI 库总结
  • gitee新的仓库,Vscode创建新的分支详细步骤
  • Python 实现日志备份守护进程
  • MCP理解笔记及deepseek使用MCP案例介绍
  • 每日算法-链表(23.合并k个升序链表、25.k个一组翻转链表)