背景:最近有人給我一大堆二進制,看的我眼花缭亂,最後得知這是漢字的編碼,那肯定要轉成漢字呀,當然不排除有标點、特殊符号、英文大小寫字母等,但這些都比較簡單,主要是漢字與二進制的轉換稍微麻煩一點。最後簡單的實作了将二進制轉換成漢子的小程式,同時将漢字轉換成二進制也是及其簡單的。作為備忘,暫記于此。
基礎先行:首先需要将二進制轉換成數字,再則需要知道漢字的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 >>>