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再相加