使用python進行漢字與二進位制之間的轉換
阿新 • • 發佈:2019-01-29
背景:最近有人給我一大堆二進位制,看的我眼花繚亂,最後得知這是漢字的編碼,那肯定要轉成漢字呀,當然不排除有標點、特殊符號、英文大小寫字母等,但這些都比較簡單,主要是漢字與二進位制的轉換稍微麻煩一點。最後簡單的實現了將二進位制轉換成漢子的小程式,同時將漢字轉換成二進位制也是及其簡單的。作為備忘,暫記於此。
基礎先行:首先需要將二進位制轉換成數字,再則需要知道漢字的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=0 for i in range(65,91): print(chr(i),end='') m1+=1 if not m1%13: print('\n',end='') #列印小寫字母表 m2=0 for i in range(97,123): print(chr(i),end='') m2+=1 if not m2%13: print('\n',end='') #將字串轉換成指定的進位制,預設為二進位制 def convert2Sys(str,func=bin): '''str:需要進行轉換的字串 func:進位制轉換函式,預設為二進位制 args:控制引數''' convertOne = lambda x:func(ord(x)) res='' for c in str: res += (convertOne(c)) print(c,':',convertOne(c)) return res #將指定進位制數轉換成對應的字元 def convert2Chr(str,sep=' ',base=10): '''str:各種進位制形式的數字,使用字串的形式表示,因為考慮到需要從檔案中讀取 sep:分隔符,預設空格 base:str的進製表示''' convertOne=lambda x:chr(x) res='' for n in str.split(sep): res+=convertOne(int(n,base)) return res if __name__ =='__main__': print(convert2Sys('你好',bin)) print(convert2Chr('101100101111101,1100001',',',2))
###結果##############
你 : 0b100111101100000
好 : 0b101100101111101
0b1001111011000000b101100101111101
好a
>>>