我有两个对象,a
和 b
,每个对象都包含字节对象中的一个字节。
我正在尝试对此进行按位运算以获得两个最高有效位(big-endian,所以在左边)。
a = sock.recv(1)
b = b'\xc0'
c = a & b
然而,它愤怒地向我吐出一个TypeError
。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for &: 'bytes' and 'bytes'
有什么方法可以在不考虑主机系统字节序的情况下对两个字节执行 AND 运算?
最佳答案
字节序列是一个不可变的整数序列(就像一个数字元组)。不幸的是,没有对它们定义按位运算——不管将它们放在一个字节序列上有多大意义。
因此您将不得不走手动路线并分别对字节运行操作。因为每个只有一个字节,所以这样做真的很简单。出于同样的原因,您也不需要关心字节顺序,因为这仅适用于谈论多个字节时。
所以,你可以这样做:
>>> a, b = b'\x12', b'\x34'
>>> bytes([a[0] & b[0]])
b'\x10'
关于python - 对字节进行按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22593822/