⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 check_sum.cpp

📁 计算crc校验码的程序
💻 CPP
字号:
/*! \file check_sum.cpp 
    \brief 定义控制台应用程序的入口点。
*/

#include "stdafx.h"
using namespace std;

/*! \fn 主函数
    \brief 输入为check_sum infile1.txt/infile2.txt 
*/
int _tmain(int argc, _TCHAR* argv[])    
{
	if(argc!=2)                        //输入参数出错,返回失败
	{
		cout<<"USAGE:inouttest file"<<endl;
		
		return 1;
	}
	ifstream in(argv[1]);
	if(!in)                            //无法打开输入文件,返回失败
	{
		cout<<"cannot open file";
		return 1;

	}
    int sumall=0;                      // 数据总和
	char temp;
	int n=0;
	int sum=0;                        // 每次读取的四个char类型数据,折合为二进制数的和
	while(!in.eof())                  //按16位读取数据,
	{
		in.get(temp);
		if(n<4)                      //每次读取四个char型数据(恰好为4个4位二进制数)
		{
			n++;
			if(temp>='A'&&temp<='F') //由于输入文件为.txt格式,需要把数据由char转换为16进制数
			{
				temp=temp-55;
				sum=16*sum+temp;
			}
			else 
				if(temp>='0'&&temp<='9')
				{
					temp=temp-48;
					sum=16*sum+temp;
				}
				else
					n--;
		}
		if(n==4)                   //读完4个char,将其加入总和中
			                       //文件为偶数个字节时,亦直接调用此部分
		{
			n=0;
			sumall=sumall+sum;
			sum=0;
		}
		
	
	}
	if(n<4&&n>0)                  //文件为奇数个字节,则将其作为高八位,也加入总和中
		{
			sum=sum*16*16;
			sumall=sumall+sum;
		}
		cout<<endl;
		cout<<"数据总和:"<<sumall<<endl; //输出总和
		while(sumall>>16)                 //将总和折叠为16位数据(参见RFC1071中算法)
			sumall=(sumall>>16)+(sumall&0xffff);
        
		cout<<"校验和:"<<hex<<(unsigned short)~sumall<<endl;//输出校验和:折叠后总和的反码

	return 0;
}
/*!\mainpage 校验和计算程序说明文档
   
 * \section  problem 一 题目要求
    
 *\subsection a (一) 目的:
   
   
   为保证网络上传输的数据的可靠性,在许多协议中都设置了校验和项,例如:IPv4、ICMPv4、IGMPV4、ICMPv6、UDP和TCP 等等。
   
   计算这些校验和的算法称为网际校验和算法,简单来说就是:把被校验的数据16位进行累加,然后取反码,若数据字节长度为
   
   奇数,则数据尾部补一个字节的0以凑成偶数。要求同学们根据上述算法,编制程序对于给定数据计算它的校验和,关于算法更
   
   详细的信息请参考RFC1071。
  
  \subsection  b (二) 要求:

  1、	命令行:check_sum infile

  其中check_sum是程序名,infile是数据文件名

  2、	输出:数据文件的校验和。

  3、	要有良好的编程规范和注释。

  4、	写文档


   \section enviorment 二 程序编写与运行环境
    
	操作系统  windows 2000 professional sp4

	使用语言 c++ 
	
	编译环境 Microsoft Visual Stdio.Net 2003

   \section use 三 程序运行方法

    在命令行方式下,键入:check_sum  infile
	
	infile参数:可在infile1、infile2中任选。

	输出为输入文件中16位数据的总和以及校验和。

	具体算法说明详见主函数内注释

  	*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -