python怎么编程十进制转化成二进制_使用python进行汉字与二进制之间的转换

背景:最近有人给我一大堆二进制,看的我眼花缭乱,最后得知这是汉字的编码,那肯定要转成汉字呀,当然不排除有标点、特殊符号、英文大小写字母等,但这些都比较简单,主要是汉字与二进制的转换稍微麻烦一点。最后简单的实现了将二进制转换成汉子的小程序,同时将汉字转换成二进制也是及其简单的。作为备忘,暂记于此。

基础先行:首先需要将二进制转换成数字,再则需要知道汉字的ASCII表和将汉字如何转换成数字的方法,其实这里就转了一个弯,使用得也是比较原始的方法;根据汉字的编码范围,打印出汉字表。

这里简单实现汉字转换成二进制,当然反过来也是很简单的。同样的方法。

一、各进制与数字之间的转换

这个比较简单,只是一个内置函数就可以实现,如:

# 数字与二进制(bin)、八进制(oct)、十进制(int)和十六进制(hex)的转换

>>> b=22909

>>> print('二进制bin:',bin(b))

二进制bin: 0b101100101111101

>>> print('八进制oct:',oct(b))

八进制oct: 0o54575

>>> print('十六进制hex:',hex(b),'\n')

十六进制hex: 0x597d

#可以使用int()函数将整数字符串转换成相应的进制数>>> print(int('adfe43',16))

11402819

>>> print(int('01010101',2))

85

>>>

二、汉子到数字

#汉字转换成数字,ord函数

>>> str = '好'

>>> print('汉字转数字ord:',ord(str),'\n')

汉字转数字ord: 22909

#数字到汉字,chr函数>>> int_e=22011

>>> hex_e=0x4e01

>>> bin_e=0b101100101111100

>>> print('十进制转换成汉字:',chr(int_e))

十进制转换成汉字: 嗻

>>> print('十六进制转换成汉字:',chr(hex_e))

十六进制转换成汉字: 丁

>>> print('二进制转换成汉字:',chr(bin_e))

二进制转换成汉字: 奼

>>>

三、如此即

#综上,汉字转换成二进制>>> a='好'

>>> print(format(ord(a),'b')) #101100101111101,或者

101100101111101

>>> print(bin(ord(a))) #0b101100101111101,转换成八进制和十六进制类似

0b101100101111101

>>>四、这是多余的#打印汉字表

>>>for ch in range(0x4e00,0x9fa6):.... print(chr(ch))

其实只要知道汉字是从0x4e00到0x9fa6就已经足够了。

五、另外,再附上一些:#打印大写字母表m1=0for i in range(65,91):print(chr(i),end='')m1+=1if not m1%13:print('\n',end='')#打印小写字母表m2=0for i in range(97,123):print(chr(i),end='')m2+=1if not m2%13:print('\n',end='')#将字符串转换成指定的进制,默认为二进制defconvert2Sys(str,func=bin):'''str:需要进行转换的字符串func:进制转换函数,默认为二进制args:控制参数'''convertOne =lambdax:func(ord(x))

res=''forcinstr:

res += (convertOne(c))print(c,':',convertOne(c))returnres#将指定进制数转换成对应的字符defconvert2Chr(str,sep=' ',base=10):'''str:各种进制形式的数字,使用字符串的形式表示,因为考虑到需要从文件中读取sep:分隔符,默认空格base:str的进制表示'''convertOne=lambdax:chr(x)

res=''forninstr.split(sep):

res+=convertOne(int(n,base))returnresif__name__ =='__main__':print(convert2Sys('你好',bin))print(convert2Chr('101100101111101,1100001',',',2))

###结果##############

你 : 0b100111101100000 好 : 0b101100101111101 0b1001111011000000b101100101111101 好a >>>

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值