我需要将以下C代码(用于计算文件的校验和)转换为Python。虽然我已经写了相应的Python代码,但结果与C版本不匹配。问题在于当溢出发生时,Python会自动将int推广为long,从而导致错误的校验和。
有什么解决办法吗?或者有没有Python函数可以将long转换为有符号的int32?
谢谢
int calcChecksum(const guchar *data, gsize len)
{
const guchar *p = data;
int checksum = 0, g, i = len;
while(i--) {
checksum = (checksum << 4) + *p++;
if((g = (checksum & 0xf0000000)) != 0)
checksum ^= g >> 23;
checksum &= ~g;
}
return checksum;
}
解决方案:
感谢所有的帮助。这是对我有用的函数 -
def int32(x):
x = 0xffffffff & x
if x > 0x7fffffff :
return - ( ~(x - 1) & 0xffffffff )
else : return x