针对字节数据类型(>>,<<,|和&)的Python 3.6逐位操作引发错误:

我是一个初学者,我正在尝试对“字节”数组中的元素执行按位操作

示例代码:

step1_result[i] = (bytes((seedrandom[i] >> 3)) | bytes((seedrandom[i] << 5)))
>>> TypeError: unsupported operand type(s) for >>: 'bytes' and 'bytes'

step1_resultseedrandom是具有“字节”类型元素的列表

有没有一种特定的方法可以对Python中的字节进行按位运算?

wang_hecheng 回答:针对字节数据类型(>>,<<,|和&)的Python 3.6逐位操作引发错误:

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]
,

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

本文链接:https://www.f2er.com/3097237.html

大家都在问