解決:我的錯,對不起
#include<stdio.h>
unsigned long memSum(unsigned char *p, unsigned long len)
{
unsigned long i, sum=0;
for(i=0; i<len; i++)
sum = sum + *p++;
return sum;
}
#define LEN2SUM (0xa13b10-4)
int main(int argc, char *argv[])
{
FILE *f;
unsigned char *buf;
unsigned long sum;
f=fopen("test2.dat", "rb");
fseek(f, 0x7c+4, SEEK_SET);
buf = (unsigned char*)malloc(LEN2SUM);
fread(buf, sizeof(char), LEN2SUM, f);
sum = memSum(buf, LEN2SUM);
printf("0x%08x\n", sum);
free(buf);
fclose(f);
}
和
f = open('test2.dat','rb')
f.seek(0x7c+4)
m = f.read(0xa13b10-4)
print '%x' % ((sum(ord(c) for c in m) & 0xFFFFFFFF))
給出相同的答案,好一個
不同的是,在C,我校驗包含解密數據的給定存儲區域,在那裏解密已經在我的Python實現已經完成「到位」
,解密在另一個緩衝區中完成,並且我仍然對加密區域進行校驗。
因爲我是一名Python初學者,所以我專注於這一點:糟糕的軌道。 我踢我的屁股二十次.....
抱歉的愚蠢問題,再次感謝您的親切幫助!
'f.read()'將'f'的內容作爲字符串加載。你需要將它轉換成'sum'的'int'列表/數組才能工作。 – MAK 2010-01-21 21:48:16
這是什麼 array.array('B',m) 沒有? – lclevy 2010-01-21 21:57:30
是的,array.array('B',m)將它轉換爲無符號字符的列表(例如array.array('b',m)將其轉換爲帶符號的字符) – Khelben 2010-01-21 22:12:52