TCP中校验和的计算问题

haolly 2013-06-18 09:41:02
第一步:cksum=(cksum>>16)+(cksum & 0xffff)
第二步:cksum+=(cksum>>16)

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

第二步里面,chsum已经变了,在左移16位这是要干嘛?
...全文
141 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
haolly 2013-06-18
  • 打赏
  • 举报
回复
引用 2 楼 fang098 的回复:
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再相加
原来cksum>>16操作之后,cksum值没有变化啊
fang 2013-06-18
  • 打赏
  • 举报
回复
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再相加
赵4老师 2013-06-18
  • 打赏
  • 举报
回复
第一步没做什么? cksum=0x12345678; cksum=(cksum>>16)+(cksum & 0xffff) printf("cksum==%08x\n",cksum);//运行看看输出什么

69,373

社区成员

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

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