Python中无符号长整型溢出的字节求和
如何把这段C语言代码转换成Python 2.6及以上版本的代码呢?
unsigned long memSum(unsigned char *p, unsigned long len)
{
unsigned long i, sum=0;
for(i=0; i<len; i++)
sum = sum + *p++;
return sum;
}
当然可以
f=open("file_to_sum",'rb')
m = f.read()
f.close()
sum( array.array('B', m) )
但是这样做不行
7 个回答
0
我试过你的代码,感觉是可以的(它以二进制方式打开数据,把它转换成一个无符号字符的列表,然后把所有的加起来)。
你遇到的问题是什么呢?可能是溢出的问题吗?也许是长度有问题?你是怎么保存这个文件的?抱歉,只有这些信息我们只能猜测!
这段代码并不完全一样,因为Python的代码似乎在处理文件,而C的代码似乎在处理一个内存数组。
2
直接用Python语言翻译的代码:
def memSum(data):
return sum(ord(c) for c in data) & 0xFFFFFFFF
3
如果你需要在数值溢出时进行循环处理,只需在最后把你的总和对最大长整型数(MAX_LONG)取余即可。