python - Python 3.6 对字节数据类型(>>、<<、|、&)的按位运算抛出错误:
问题描述
我是初学者,我正在尝试对“字节”数组中的元素执行按位操作
示例代码:
step1_result[i] = (bytes((seedrandom[i] >> 3)) | bytes((seedrandom[i] << 5)))
>>> TypeError: unsupported operand type(s) for >>: 'bytes' and 'bytes'
step1_result
并且seedrandom
是一个包含 'byte' 类型元素的列表
是否有特定的方法可以在 Python 中对字节应用按位运算?
解决方案
Python 的按位运算符仅对整数进行操作,因此您需要在执行按位运算之前将每个运算符转换byte
为 an 。int
import sys
b1, b2 = [b'\x77', b'\x88']
int.from_bytes(b1, sys.byteorder) << int.from_bytes(b2, sys.byteorder)
请注意,如果您的字节位于实际的bytearray中,则不需要显式转换,因为对 bytearray 进行索引会返回整数。
ba = bytearray(b'\x77\x01')
ba[0] << ba[1]
同样,如果字节在复合字节对象中
bs = b'\x77\x01'
bs[0] << bs[1]
推荐阅读
- python - python分组并计算每行的列
- javascript - 访问传递给孩子的道具而不定义它们
- maven - 缺少工件错误和容器“Maven 依赖项”引用不存在的库
- ios - TableView Cell内的选择tableView - swift 3中的didSelectRowAt
- sql - 在 Teradata Studio Express 中禁用括号的自动完成
- python - 使用python读取带有特殊字符的CSV
- android - 升级到Android studio Bumblebee canary 4 throw java.lang.AbstractMethodError
- powershell - 如何让 netcat 服务器处理来自 Powershell 的上传文件?
- javascript - 更改 dropzone.js 和 rails 的错误文本
- python - matplotlib中二维函数的粒子群