Python 2.7 对于循环c++;vs python 你能帮我把这个C++代码转换成Python: 我正在尝试对数据进行异或运算

Python 2.7 对于循环c++;vs python 你能帮我把这个C++代码转换成Python: 我正在尝试对数据进行异或运算,python-2.7,Python 2.7,C++: void Encrypt(void data, Dword size) { if(size > 0) for(DWORD i = size - 1; i > 0; i--) ((LPBYTE)data)[i] ^= ((LPBYTE)data)[i - 1]; } 虽然这不太像蟒蛇。您可能希望删除显式size参数,只需使用len(data)在python中执行此操作,您可能希望使用类: 请注意注释,您不能传递字符串对象,因为

C++:

void Encrypt(void data, Dword size)
{
    if(size > 0)
        for(DWORD i = size - 1; i > 0; i--)
            ((LPBYTE)data)[i] ^= ((LPBYTE)data)[i - 1];
}

虽然这不太像蟒蛇。您可能希望删除显式size参数,只需使用len(data)

在python中执行此操作,您可能希望使用类:


请注意注释,您不能传递字符串对象,因为python中的字符串是不可变的<另一方面,code>bytearray不是。

我想你指的是void*data。谢谢锑,但出于某种原因,我得到了这个错误“TypeError:unsupported operation type for^:'str'和'str'”有什么想法吗?那是因为你在字符串上运行它,而xor对它没有意义。你可以通过说map(ord,s)将其转换为数字字节,其中s是你的字符串。感谢Jonathon,这似乎是可行的,但是为什么输出数据的大小会增加一倍呢?它现在工作得很好。珍惜你的时间,分享你的知识。你们都很聪明!
def Encrypt(data, size):
    for i in range(size-1, 0, -1):
        data[i] = data[i] ^ data[i-1]
def encrypt(data):
    n = len(data)
    for i in range(n-1, 0, -1):
        data[i] ^= data[i-1]      # for this to work, data has to be mutable

f = open('somefile.bin', 'rb')
buf = bytearray(f.read())
f.close()

encrypt(buf)