1. 程式人生 > >使用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=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
>>>