请教CheckSum问题.

lockhall 2007-01-14 01:47:19

unsigned short checksum(unsigned short *buffer,int size) //校验和的求法
{
unsigned long cksum=0;
while(size>0) //各位求和
{
cksum+=*buffer++;
size-=sizeof(unsigned short);
}
if(size)
cksum+=*(unsigned char *)buffer;
cksum=(cksum>>16)+(cksum & 0xffff); //移位,位与运算
cksum+=(cksum>>16);
return (unsigned short)(~cksum); //再取反
}

哪位哥们给说说校验和算法...

buffer和size是什么传进来的?代表什么?
...全文
468 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lockhall 2007-01-15
  • 打赏
  • 举报
回复
while(size>0) //各位求和
{
cksum+=*buffer++;
size-=sizeof(unsigned short);
}

if(size)这个有意义么?size肯定为0吧?因为数据类型为unsigned short啊...

执行完size -= sizeof(unsigned short);后肯定为0啊
hustivan 2007-01-15
  • 打赏
  • 举报
回复
IP数据报的检验和:
  为了计算一份数据报的I P检验和,首先把检验和字段置为0。然后,对首部中每个16 bit进行二进制反码求和(整个首部看成是由一串16 bit的字组成),结果存在检验和字段中。当收到一份I P数据报后,同样对首部中每个16 bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。
kingofbull 2007-01-15
  • 打赏
  • 举报
回复
unsigned short *buffer, 发送的数据
int size 数据量

目的是比如一些通讯过程中保证发送和接收到的数据保持严格一致。
jixingzhong 2007-01-14
  • 打赏
  • 举报
回复
buffer 是待校验的数据,
size 是这个等待校验的数据长度
fosjos 2007-01-14
  • 打赏
  • 举报
回复
buffer是等待校验的数据,size是buffer长度
返回的是校验值

就是说buffer有些不同的话,checksum就会不同
用于检验buffer传递时数据是否有偏差
lockhall 2007-01-14
  • 打赏
  • 举报
回复
自己顶个!唤高手出现!

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧