【发布时间】:2014-10-21 04:19:28
【问题描述】:
我制作了一个 8 位校验和函数,但总和不会环绕,我的意思是左侧的溢出进位不会添加回右侧。我怎样才能做到这一点?
unsigned char checksum(unsigned char message[], int nBytes)
{
unsigned char sum = 0;
while (nBytes-- > 0)
{
sum += *(message++);
}
return (~sum);
}
例如,当添加两个字节时,这是我试图实现的环绕:
1001 1100
+1100 0010
------------
0101 1111 (sum)
1010 0000 Checksum (1's complement)
【问题讨论】:
-
"overflow carries on the left are not added back on the right"这通常不是溢出或环绕的工作方式。 -
校验和的计算通常会忽略进位/溢出。您确定要将溢出添加回产品中吗?
-
我正在控制发送方和接收方,所以它可以正常工作。我只是遵循规范,但很高兴知道标准是什么以备将来通知,谢谢:)
标签: c networking checksum