我需要将以下 c 代码(计算文件的校验和)转换为 python。我已经用python编写了相应的代码,但结果与c版本不匹配。问题在于,只要发生溢出,Python 就会自动将 int 提升为 long,这会导致错误的校验和。
知道如何克服这个问题吗?或者是否有一个Python函数可以将long转换为signed int32?
Thanks
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
Use numpy.int32 or numpy.uint32
如果您需要限制范围。或者修改它1 << 32
在可能“溢出”的操作之后。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)