python中对象的逐位处理

python中对象的逐位处理,python,python-2.7,bit-manipulation,bit,Python,Python 2.7,Bit Manipulation,Bit,因此,我尝试在python中的两个对象之间进行按位“XOR”,作为XOR交换例程的一部分(作为演示示例)。但是我注意到按位异或在字符串上不起作用 我对stackoverflow进行了一些探索,发现: 答案并不令人满意,因为我希望能够对数据进行原始字节级的操作。这在python中是不可能的吗 我希望有人能给我指出一个库,让我能够将所有对象视为字节块,我可以使用熟悉的运算符(如“xor”)自由操作这些字节块。字符串在Python中不像在C中那样是字节数组。它们在内部是UTF-32(UCS-4)II

因此,我尝试在python中的两个对象之间进行按位“XOR”,作为XOR交换例程的一部分(作为演示示例)。但是我注意到按位异或在字符串上不起作用

我对stackoverflow进行了一些探索,发现:

答案并不令人满意,因为我希望能够对数据进行原始字节级的操作。这在python中是不可能的吗


我希望有人能给我指出一个库,让我能够将所有对象视为字节块,我可以使用熟悉的运算符(如“xor”)自由操作这些字节块。字符串在Python中不像在C中那样是字节数组。它们在内部是UTF-32(UCS-4)IINM

Python非常容易被黑客攻击。如果没有什么东西,你可以弯曲它,在大部分时间里做你想做的事情:

>>> class MyBytes(bytes):
...     def __xor__(self, v):
...         return bytes(a ^ b for a, b in zip(self, v))
...
>>> MyBytes('!7-x9*=x9x49"!x:*9,', 'ascii') ^ MyBytes('XXXXXXXXXXXXXXXXXXX', 'ascii')
b'you are a lazy brat' 

这是Python3,我想您可以在早期版本中找到如何做到这一点。

字符串在Python中是不可变的。您希望
bytearray
类型就地操作数据

>>> b = bytearray([1,2,3,4,5,6,7,8])
>>> for i in xrange(len(b)):
...   b[i] ^= 255
...
>>> b
bytearray(b'\xfe\xfd\xfc\xfb\xfa\xf9\xf8\xf7')

我想您可以使用pickle?Python整数是任意长度的,您可以将字符串转换为带填充的整数,并对其使用按位异或运算符。Python的对象模型不允许按字节访问其对象内部。关于字符串,它甚至不允许您以任何方式修改它们→ 从那以后就没有了。