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