我是一个初学者,我正在尝试对“字节”数组中的元素执行按位操作
示例代码:
step1_result[i] = (bytes((seedrandom[i] >> 3)) | bytes((seedrandom[i] << 5)))
>>> TypeError: unsupported operand type(s) for >>: 'bytes' and 'bytes'
step1_result
和seedrandom
是具有“字节”类型元素的列表
有没有一种特定的方法可以对Python中的字节进行按位运算?
答案 0 :(得分:3)
Python的按位运算符only operate on integers,因此您需要在执行按位运算之前将每个clear_output()
转换为byte
。
int
请注意,如果您的字节位于实际的bytearray中,则不需要显式转换,因为在字节数组上建立索引会返回整数。
import sys
b1, b2 = [b'\x77', b'\x88']
int.from_bytes(b1, sys.byteorder) << int.from_bytes(b2, sys.byteorder)
同样,如果字节位于复合bytes对象中
ba = bytearray(b'\x77\x01')
ba[0] << ba[1]
答案 1 :(得分:1)
bytes
是不可变的序列类型,而不是数字类型。您是指元素操作,例如bytes(map(lambda x: (x<<3) & 0xff, b'\xff\x03'))
(列表理解形式:bytes([(x<<3) & 0xff for x in b'\xff\x03'])
)吗?请注意,字节数不能超过255,因此在将其收集到第二个字节对象之前,我需要将其掩码为8位。 Python没有用于单数字节的标准类型,就像它没有用于单数字符的标准类型一样。如果您从bytes
对象读取单个元素,则该字节将转换为int
。