當前位置:首頁 » 編程語言 » python二進制轉字元串

python二進制轉字元串

發布時間: 2023-08-30 05:49:47

python怎麼處理二進制流

可以的,二進制是計算機內的表示方法,處理二進制數據是最基本的能力。
如果是二進制字元串轉十進制:
>>> x = '10101010'
>>> int(x, 2)
170

如果是從文件或網路中獲取的數據,要知道某一位是0還是1的話,獲取的數據可以按字元讀取,由於一個字元由8位二進製表示,分別讀取1到8位的二進制值就可以了:
>>> get_char_bit = lambda char, n: (char >> (8-n)) & 1 # 從高到低分別為第1~8位
>>> data = b'ab' # 在python3中字元串默認是unicode,所以加上b前綴兼容
>>> # 在python3中按字元讀取byte字元串是數字,而python2讀出來的卻是字元,但bytearray是一致的都是數字
>>> data = bytearray(data)
>>> result = []
>>> for char in data:
for i in range(1, 9):
result.append(get_char_bit(char, i))

>>> result
[0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0]

② 關於python如何實現各進制轉換的總結大全

ctf經常遇到進制轉換的問題,就正好做一個進制轉換總結,分享出來供大家參考學習,下面來一起看看詳細的介紹:
字元串與十六進制轉換

例如網路ctf 12月的第二場第一個misc
?

1

626536377D

比較簡單的一種做法就是直接調用字元串的.decode('hex')解密即可, 但如果不用這個函數你會怎麼解呢?
一種思路就是先2個分組,解出每組的ascii值,合並下字元串即可得到,具體代碼如下
?

1234567

import res='626536377D's = re.findall(r'.{2}',s)s = map(lambda x:chr(int(x,16)),s)print ''.join(s)>>>flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}

前面說了字元串的decode('hex')函數,另外還有兩個轉16進制的函數,這里都總結一下
內置函數hex()

只能轉換10進制整數為十六進制,不能轉字元串
binascii庫的hexlify()和b2a_hex()

這兩個函數的功能是將字元串轉換成十六進制,對應的解密函數分別為 unhexlify()和a2b_hex()
進制互轉

二進制,八進制,十六進制轉10進制比較簡單,直接調用

int函數
?

1

int(str,base) //返回十進制整數,但注意此時第一個參數為字元串

對應的解密函數分別是
?

12345

bin() //10進制轉二進制 oct() //十進制轉八進制 hex() //十進制轉十六進制

但二進制直接轉16進制就需要多走一步了,先用int轉十進制,在用上面提到的hex()函數將十進制轉換成十六進制,比較精簡的寫法是
?

1

map(lambda x:hex(int(x,2)),['0011']) //lambda表達式

或者是
?

1

[hex(int(x,2)) for x in ['0011']] //列表解析

對應的解密函數就是
?

1

map(lambda x:bin(int(x,16)),['ef'])

最後在附上自己用python寫的一個進制轉換小工具,主要功能是對一組二進制,或者ascii,或十六進制轉換成字元串,想必ctf上也經常會遇到這類題型吧
?

041424344

# make by 江sir#coding:utf-8import reimport argparse def bintostr(text): text = text.replace(' ','') text = re.findall(r'.{8}',text) s = map(lambda x:chr(int(x,2)),text) #批量二進制轉十進制 flag = ''.join(s) return flag def asciitostr(text): if ' ' in text: text = text.split(' ') elif ',' in text: text = text.split(',') s = map(lambda x:chr(int(x)),text) flag = ''.join(s) return flag def hextostr(text): text = re.findall(r'.{2}',text) #print text s = map(lambda x:chr(int(x,16)),text) #print s flag = ''.join(s) return flag if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument("-b") parser.add_argument("-a") parser.add_argument("-x") argv = parser.parse_args() #print argv if argv.b: res = bintostr(argv.b) elif argv.a: res = asciitostr(argv.a) elif argv.x: res = hextostr(argv.x) print res

用法:
十六進制轉字元串:

626536377D
?

12

bintostr.py -x "626536377D"flag{ec8b2ee0-3ae9-4c21-a012-08aa5fa7be67}

二進制轉字元串:

可以有空格,也可以無空格
00101111 01100110 00110110 00110111 00110011 00110010 00110100 00110001 00110000 01100001 01100001 01100100 01100011 00110000 00110011 00110111 01100110 01100010 00110000 01100011 01100010 01100001 01100001 00110000 00110000 01100011 00110111 00110101 00110011 00110001 00110011 00110111 00110011 00101110 01110100 01111000 01110100
?

12

bintostr.py -b "00101111 01100110 00110110 00110111 00110011 00110010 00110100 00110001 00110000 01100001 01100001 01100100 01100011 00110000 00110011 00110111 01100110 01100010 00110000 01100011 01100010 01100001 01100001 00110000 00110000 01100011 00110111 00110101 00110011 00110001 00110011 00110111 00110011 00101110 01110100 01111000 01110100"/.txt

ascii轉字元串

可以是空格分隔,也可以是,分隔
s='45 46 45 46 32 45 32 46 46 45 46 32 46 45 46 46 32 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 32 45 46 46 46 32 46 46 46 32 46 45 46 46 32'
?

12

bintostr.py -a "45 46 45 46 32 45 32 46 46 45 46 32 46 45 46 46 32 46 46 46 32 45 46 46 46 32 46 46 45 45 46 45 32 45 46 46 46 32 46 46 46 32 46 45 46 46 32"-.-. - ..-. .-.. ... -... ..--.- -... ... .-..

以上實例均來自某些ctf賽題
總結

③ python3字元串與二進制互相轉換

python中,沒有" 0-1 "形式的二進制類型,但我們依然可以存儲二進制類型的數據。

利用字元串(string)類型,可以存儲二進制數據。即:將二進制數據以字元串的形式存儲。

下面分享一種字元串和二進制串互相轉換的具體實現方法。

運行結果:

【END】

最後給大家推薦一個好東西:

每個python程序員想必都會很喜歡的東西,點擊去看

喜歡嗎?喜歡就點個贊吧~

④ python中二進制數10101轉為十進制數的表達式是什麼

在Python中,可以使用int()函數將二進制數10101轉換為十進制數。int()函數的第一個參數為要轉換的數,第二個參數為進制。例如,要將二進制數10101轉換為十進制數,可以使用以下表達式:
int('10101', 2)

該表達式會將二進制數10101轉換為十進制數21。

⑤ python怎麼將字元串轉化為八位二進制

這是我寫的一段程序,可以實現將字元串轉為二進制。

基本思路:

1,將一個字元串轉換為字元。這里採用了迭代器__iter__()內置函數,即可實現這個方法

2,將每一個字元轉換為十進制,再轉化為二進制。bin()函數只能將一個十進制函數轉換為二進制,ord()函數可以將一個字元轉換為十進制(實質就是這個字元的unicode編號),如此就實現了不同計數方法之間的轉化

⑥ 我想知道Python腳本如何將二進制轉換為字元串

def btos(b):

->ans = []

->for bb in range(0,len(b)-1,8):

->->i = int(b[bb:bb+8],2)

->->ans.append(i)

->return bytes(ans).decode('utf8')


def stob(s):

->b = s.encode('utf8')

->ans = ''

->for bb in b:

->->anss = int(bin(bb)[2:])

->->ans += '{:08d}'.format(anss)

->return ans

⑦ 怎樣用python進行二進制,八進制,十進制轉換

從二進制轉換為十進制有幾種方式
第一種是在二進制數前加上0b,顯示時會自動轉換為十進制,注意這並不是字元串
x = 0b1010print(x)

如果是字元串可以利用eval求值

x = eval('0b1010')

第二種是利用int函數,字元串可以以0b為前綴,也可以不使用
int('1010',base=2)int('0b1010',2)

函數會將輸入base進制的字元串轉換為十進制

⑧ python 數值轉BCD,如何拼接二進制字元串

首先你可以自己寫函數採用%2的方式來算.
但是python自帶了方法 bin.
比如bin(12345)回返回字元串'0b11000000111001' 這個時候在把0b去掉即可.
bin(number).replace('0b','')

熱點內容
sql倒序查詢 發布:2025-02-04 06:49:18 瀏覽:192
r7000p2021買哪個配置 發布:2025-02-04 06:40:17 瀏覽:965
如何消除微信小程序緩存 發布:2025-02-04 06:34:24 瀏覽:633
python27mysqldb 發布:2025-02-04 06:28:44 瀏覽:768
svn文件夾許可權 發布:2025-02-04 06:23:47 瀏覽:902
師編程 發布:2025-02-04 06:22:51 瀏覽:169
加密類型wpa 發布:2025-02-04 06:21:27 瀏覽:178
互聯網與雲伺服器 發布:2025-02-04 06:15:56 瀏覽:254
硬碟挖礦源碼 發布:2025-02-04 06:15:45 瀏覽:76
寶馬3系哪個配置合適 發布:2025-02-04 06:03:10 瀏覽:328