我需要将以下c代码(计算文件的校验和)转换为python。我写过,python中相应的代码,但结果与c版本不匹配。问题是python在发生溢出时自动将int提升为long,这会导致错误的校验和。
知道如何克服这个问题吗?或者是否有一个python函数将long转换为signed 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