二进制python_利用Python对二进制数据进行按位处理
標(biāo)簽:
最近在用Python做數(shù)據(jù)包解析,遇到一些要按位處理二進(jìn)制數(shù)據(jù)的問題。折騰了一個(gè)早上,大概有一點(diǎn)思路,記下來備忘吧。
我要解決的問題是判斷一個(gè)字節(jié)的某幾位是否為特定的值,比如判斷一個(gè)字節(jié)的前四位是不是0110。
首先,創(chuàng)建一個(gè)文檔,里面隨便寫點(diǎn)東西,保存之后用可以查看二進(jìn)制數(shù)據(jù)的軟件打開,我用的是notepad++里的HEX-Editor插件。
可以看到字符‘a(chǎn)’對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)是61(01100001)。下面對(duì)這個(gè)字節(jié)的數(shù)據(jù)進(jìn)行處理。
首先是打開文件,用read()函數(shù)讀進(jìn)去一個(gè)字節(jié),用16進(jìn)制進(jìn)行編碼,編碼之后會(huì)變成一個(gè)str類型,這時(shí)對(duì)它進(jìn)行轉(zhuǎn)換,int()函數(shù)可以將一個(gè)str轉(zhuǎn)換成int類型,int()函數(shù)的第二個(gè)參數(shù)代表了進(jìn)制。mask為11110000,我用mask和要處理的字節(jié)進(jìn)行與,可以得到數(shù)據(jù)前四位的內(nèi)容。在這里,01100001的前四位是0110,與完的結(jié)果是01100000,即96。
f=open('1.txt','rb')
data=int(f.read(1).encode('hex'),16)
print data
print bin(data)
mask=0b11110000
print mask
res=data&mask
print res
標(biāo)簽:
總結(jié)
以上是生活随笔為你收集整理的二进制python_利用Python对二进制数据进行按位处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python初级语法_python语法基
- 下一篇: python程序中怎样数个数_pytho