且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《计算机网络课程设计(第2版)》——2.5节相关扩展

更新时间:2022-09-28 19:07:07

2.5 相关扩展
前面我们提到,校验和还有其他一些计算方法,下面我们就来简要介绍一下利用延迟进位法进行计算的方法。
延迟进位法的算法描述:将进位累加的过程延迟到整个累加循环结束之后进行,这样可以提高计算速度。

  1. 主要的实现过程
while(!infile.eof())         //判断文件是否结束, 若否则对被校验的16位数据进行累加
{
    int h,l;                 //分别表示16位数据的高8位和低8位
    infile>>hex>>h;          //从文件中读入一个16进制表示的数据, 作为高8位
    if(infile.eof()) l=0;    //若后面没有其他数据, 将0作为低8位
    else infile>>hex>>l;     //若后面还有数据, 读入下一个作为低8位
    sum+=(h*256+l);          //将组合好的16位数据累加到sum中  
}
infile.close();              //关闭文件
check_sum=short((sum&0xffff)+(sum>>16));
//将32位累加和转换为16位数据
//若累加过程中有向高16位的进位, 则要将进位部分加到低16位上
check_sum=~check_sum;        //对累加和取反码