《计算机网络课程设计(第2版)》——2.4节课程设计分析

    xiaoxiao2021-08-19  213

    2.4 课程设计分析校验和的计算过程主要分为三个步骤:数据文件的输入、校验和的计算和校验结果的输出。其中,主要的是数据的输入和校验和的计算。

    数据的输入方式输入数据可能是以字符形式存储的,而校验和的计算则要采用数据形式,所以在从文件读取数据时,都要进行字符到数据的相互转换。

    1) 将读入的ASCII码转化为相应的整型变量。

    if(ch>='0'&&ch<='9') ch-='0'; else { if(ch>='a'&&ch<='f') ch=ch-'a'+10; else if(ch>='A'&&ch<='F') ch=ch-'A'+10; } 2) 在使用C++编程时直接使用16进制的方式打开输入文件。 ifstream in(argv[1],ios::nocreate); in.setf(ios::hex); 校验和的计算校验和算法是本程序的核心部分,在2.5节中我们将介绍一些相关的算法,而应用最为普遍的是端循环进位法。

    端循环进位的算法如下:将数据按一定数位进行累加,最高位的进位则循环加入最低位。待校验的数据按16位为一个单位相加,采用端循环进位,最后对所得16位的数据取反码。因为待校验的数据是以字节方式分隔的,所以为了方便,将16位的数据分成高8位和低8位分别处理。该算法的代码如下:

    endaroundcarry(int& highbyte,int & lowbyte) { while(highbyte>0xff||lowbyte>0xff) //高8位或低8位中的任何一方产生溢出(进位) { lowbyte+=(highbyte>>8); //低字节加上高字节超过8位的进位 highbyte=highbyte&0xff; //清除高字节的进位 highbyte+=(lowbyte>>8); //高字节加上来自低字节的进位 lowbyte=lowbyte&0xff; //清除低字节的进位 } 相关资源:方便编写程序的工具

    最新回复(0)