Python中无符号长整型溢出的字节求和

2 投票
7 回答
3213 浏览
提问于 2025-04-15 18:20

如何把这段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)取余即可。

撰写回答