2.5 相关扩展
前面我们提到,校验和还有其他一些计算方法,下面我们就来简要介绍一下利用延迟进位法进行计算的方法。
延迟进位法的算法描述:将进位累加的过程延迟到整个累加循环结束之后进行,这样可以提高计算速度。
- 主要的实现过程
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; //对累加和取反码