[python3]将明文字符串转化为01比特字符串的方法

Yvonne ·
更新时间:2024-09-21
· 826 次阅读

[python3] 将明文字符串转化为01比特字符串的方法
在做某些大学的课程设计的时候,例如RSA加解密算法,模拟构建网络协议等,我们会更希望对只包含’0’和’1’的字符串进行操作。我在实现这一步的时候走了很多弯路,在这里给出我的几个解决方法。 import re def Str_encode(s:str,rule='utf-8'): ''' 将明文字符串按照rule的格式转化为01字符串 :param s: 待编码字符串 :param rule: 编码方案 默认utf-8 :return: 字符串对应01字符串 ''' sc=s.encode(rule) bc=[bin(int(i))[2:].rjust(8,'0') for i in sc ] rtn=''.join(bc) return rtn

首先将字符串s编码,返回一个bytes类型sc。对于bytes类型,当你尝试解包时,你会获得这一字节的整数(0~255)然后通过bin函数将其转换成二进制字符串形式,但是bin方法返回的字符串首先开头是’0b’其次他的第一位必定为1,会吞掉在此之前的0,我们用一个右对齐rjust()在前面填零。
最后的join起到一个字符串拼接的作用。
PS:这个函数体的int(i)其实有点多此一举了,可以删掉

import re def Str_decode(s:str,rule='utf-8'): ''' 将01字符串(不加任何标识符和纠错码)转化为对应的明文字符串(默认UTF-8) :param s:01字符串 :return:解码原文 ''' if len(s)==0: return '>>内容为空<<' if len(s)%8!=0: raise SyntaxError('编码不是八的倍数') #至少是字节的倍数才能操作 msg=re.sub(r'0x','',hex(int(s,2))) rtn=bytes.fromhex(msg).decode(rule) return rtn

解码也很简单。首先将输入的01字符串利用int函数转化为int形式,然后再用hex()函数将其转换成十六进制。hex()函数的返回值是字符串,但是开头必定有’0x’,所以我们顺便把’0x’删了,好方便下一步操作。然后利用bytes.fromhex()函数输入一个十六进制的字符串组,将其转化为bytes格式。然后通过decode()函数将其解码出来。

博主就想随便记录一下我的学习历程,如果对大家有帮助就点个赞让我知道。要是觉得做的不好可以在评论提出改进的策略。我们未来再会(逃


作者:1tick的延迟



方法 字符串 比特 Python3 Python 字符

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章