我需要将以下 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