Python中字符串和二進制互轉
最近在搞圖形相關的東西,有時候操作涉及到每個 比特 的操作,所以必須實現一個方法(將字符串二值化),就是把字符串轉換成爲二進制形式。搜索了一些相關的實現,但是本篇只對兩種進行介紹,並且個人推薦第二種。
第一種實現方式,使用bitarray庫實現
from bitarray import bitarray
def str2bitarray(s):
ret = bitarray(''.join([bin(int('1' + hex(c)[2:], 16))[3:] for c in s.encode('utf-8')]))
return ret
def bitarray2str(bit):
return bit.tobytes().decode('utf-8')
如果你的實踐能力比較強的化,在你複製或者寫上述代碼的之前應該是控制檯界面進行pip install bitarray安裝操作,但是吧,安裝執行結果如下圖所示:
我是用的是國內的鏡像,而且這個ERROR的重點是沒有VS的C++依賴不啦不啦…,我不喜歡這種依賴性特別強的,索性放棄第一種實現。
第二種實現方式::
爲什麼我推薦使用這種方式呢?因爲我喜歡這種儘量不安裝第三方依賴的方式,更加輕量化。
代碼實現如下:
def encode(s):
return ' '.join([bin(ord(c)).replace('0b', '') for c in s])
def decode(s):
return ''.join([chr(i) for i in [int(b, 2) for b in s.split(' ')]])
var1 = encode("Hello World , 你好 世界。")
print(var1)
print(decode(var1))
var1Arr = var1.split(" ")
for i in range(len(var1Arr)):
print(var1Arr[i])
運行結果如下:
可以看出,這裏就是把字符轉換成了二進制類型,每個二進制類型的數據之間用空格隔開。
中文對應的二進制數據佔用兩個字節,英文佔用的是一個字節。