我需要将以下c代码(用于计算文件的校验和)转换为python。我写了,在python中的相应代码,但结果与c版本不匹配。问题是python在发生溢出时自动将int提升为long,并导致错误的校验和。计算校验和的问题:将int转换为带符号的int32
任何想法如何克服这个问题?或者是否有一个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
c代码中没有缺少的东西吗? data/p似乎以非常奇怪的方式使用... – mjv 2010-02-20 02:11:31
对不起,在格式化过程中意外删除了'+'。更正。谢谢 – 2010-02-20 02:20:53