计算校验和时的问题:将 int 转换为有符号 int32
我需要把下面这段C语言代码(用于计算文件的校验和)转换成Python。我写了对应的Python代码,但结果和C语言的版本不一样。问题在于,Python在发生溢出时会自动把整数提升为长整型,这导致了校验和计算错误。
有没有什么办法可以解决这个问题?或者有没有Python函数可以把长整型转换为带符号的32位整数?
谢谢
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