最近在用Python做数据包解析,遇到一些要按位处理二进制数据的问题。折腾了一个早上,大概有一点思路,记下来备忘吧。
我要解决的问题是判断一个字节的某几位是否为特定的值,比如判断一个字节的前四位是不是0110。
首先,创建一个文档,里面随便写点东西,保存之后用可以查看二进制数据的软件打开,我用的是notepad++里的HEX-Editor插件。
可以看到字符‘a’对应的二进制数据是61(01100001)。下面对这个字节的数据进行处理。
首先是打开文件,用read()函数读进去一个字节,用16进制进行编码,编码之后会变成一个str类型,这时对它进行转换,int()函数可以将一个str转换成int类型,int()函数的第二个参数代表了进制。mask为11110000,我用mask和要处理的字节进行与,可以得到数据前四位的内容。在这里,01100001的前四位是0110,与完的结果是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
原文:http://blog.csdn.net/u012322724/article/details/43526249