for loop c ++ vs python

时间:2012-06-28 04:39:29

标签: python-2.7

请帮我把这个c ++代码转换成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];
}

2 个答案:

答案 0 :(得分:1)

def Encrypt(data, size):
    for i in range(size-1, 0, -1):
        data[i] = data[i] ^ data[i-1]

虽然这不是pythonic。您可能想要删除显式大小参数,只需使用len(数据)

答案 1 :(得分:0)

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

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)

注意注释,你不能传递一个字符串对象,因为python中的字符串是不可变的。另一方面,bytearray不是。