读书人

TCP中校验和的计算有关问题

发布时间: 2013-06-25 23:45:41 作者: rapoo

TCP中校验和的计算问题
第一步:cksum=(cksum>>16)+(cksum & 0xffff)
第二步:cksum+=(cksum>>16)

第一步里面cksum>>16 表示取高16位,然后
(cksum & 0xffff)好像没做什么,1还是1,0还是0

第二步里面,chsum已经变了,在左移16位这是要干嘛?

[解决办法]
第一步没做什么?
cksum=0x12345678;
cksum=(cksum>>16)+(cksum & 0xffff)
printf("cksum==%08x\n",cksum);//运行看看输出什么
[解决办法]
cksum=(cksum>>16)+(cksum & 0xffff)
将高16bit与低16bit相加
//
第一步里面cksum>>16 表示取高16位,然后
(cksum & 0xffff)好像没做什么,1还是1,0还是0
楼主的意思是cksum>>16以后不执行cksum & 0xffff时cksum的值就变了,如果是这样理解就错了,
cksum+=(cksum>>16)
将进位到高位的16bit与低16bit再相加

读书人网 >C语言

热点推荐