首页 > 解决方案 > 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 中对字节应用按位运算?

标签: pythonpython-3.6bitwise-operatorsbit-shift

解决方案


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]

推荐阅读