python按位处理二进制文件,利用Python对二进制数据进展按位处理

利用Python对二进制数据进行按位处理

最近在用Python做数据包解析,遇到一些要按位处理二进制数据的问题。折腾了一个早上,大概有一点思路,记下来备忘吧。

我要解决的问题是判断一个字节的某几位是否为特定的值,比如判断一个字节的前四位是不是0110。

首先,创建一个文档,里面随便写点东西,保存之后用可以查看二进制数据的软件打开,我用的是notepad++里的HEX-Editor插件。

1843810.html

204436495.png

可以看到字符‘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

204436496.png

1843810.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 可以很方便地处理二进制数据。以下是一些处理二进制数据的常用函数和方法: 1. 内置函数 `open()`:可以用于打开二进制文件。 ```python f = open('file.bin', 'rb') # 注意使用二进制模式打开文件 ``` 2. 内置函数 `struct.pack()` 和 `struct.unpack()`:可以用于将二进制数据打包和解包。 ```python import struct # 将整数 42 打包成二进制数据 packed = struct.pack('i', 42) print(packed) # 输出 b'*\x00\x00\x00' # 将二进制数据解包为整数 unpacked = struct.unpack('i', packed) print(unpacked) # 输出 (42,) ``` 3. 内置模块 `array`:可以用于创建和操作数组。 ```python import array # 创建一个包含整数的数组 a = array.array('i', [1, 2, 3]) print(a) # 输出 array('i', [1, 2, 3]) # 将数组文件 with open('data.bin', 'wb') as f: a.tofile(f) # 从文件中读取数组 with open('data.bin', 'rb') as f: b = array.array('i') b.fromfile(f, 3) print(b) # 输出 array('i', [1, 2, 3]) ``` 4. 内置模块 `bytes` 和 `bytearray`:可以用于创建和操作字节序列。 ```python # 创建一个字节序列 b = bytes([0x48, 0x65, 0x6c, 0x6c, 0x6f]) print(b) # 输出 b'Hello' # 将字节序列转换为可打印的字符串 s = b.decode('utf-8') print(s) # 输出 'Hello' # 创建一个可变字节序列 ba = bytearray(b) ba[0] = 0x68 # 修改第一个字节 print(ba) # 输出 bytearray(b'hello') ``` 以上只是一些常见的二进制数据处理函数和方法,Python 还有很多其他的工具和库可以用于处理二进制数据,如 `numpy`、`pandas` 等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值