この C++ コードを Python に変換するのを手伝ってくれませんか: データを XOR しようとしています
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];
}
この C++ コードを Python に変換するのを手伝ってくれませんか: データを XOR しようとしています
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];
}
def Encrypt(data, size):
for i in range(size-1, 0, -1):
data[i] = data[i] ^ data[i-1]
これは完全にpythonicではありませんが。明示的なサイズ引数を削除して、len(data)を使用することをお勧めします。
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
一方、そうではありません。