计算机网络模拟实验:C++模拟计算效验和

这篇博客介绍了如何使用C++编写程序计算文件的16位效验和。通过读取文件内容,每两个字符组合成一个16位整数并累加,处理进位,最终得到校验和。文章提到了代码存在的问题,如无法处理大文件和包含中文的文件。
摘要由CSDN通过智能技术生成

编写一个计算机程序用来计算一个文件的16位效验和。最快速的方法是用一个32位的整数来存放这个和。记住要处理进位(例如,超过16位的那些位),把它们加到效验和中。
原理:把要发送的数据看成16比特的二进制整数序列,并计算他们的和。若数据字节长度为奇数,则在数据尾部补一个字节的0以凑成偶数。
例子:16位效验和计算,下图表明一个小的字符串的16位效验和的计算。
为了计算效验和,发送计算机把每对字符当成16位整数处理并计算效验和。如果效验和大于16位,那么把进位一起加到最后的效验和中。
在这里插入图片描述

本人代码思路:计算文件的校验和首先要读取文件中的内容,我使用C++提供的ifstream类来读取文件内容,以文本方式读取。因为是计算文件的16位校验和,因此每两个字符组成一个数值,然后将所有的数值进行相加,我的做法是把读取到的字符以每两个字符划分为一个组,要是字符个数为奇数,要做补一个字节的0,然后将每一个小组的第一个字符的ascii值乘以256加上第二个字符的ascii值组成一个数值。再把所有的数值相加得到总和,将总和除以65536,得到进位数;将总和取模65536,得到保留数。最后将进位数和保留数相加得到校验和的十进制数,再将该十进制数转化为十六进制数就行了。
代码缺陷:
1.不能计算过大的文件
2.不能计算含中文的文件

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
   
	string text="";    //用来保存还没进行累加的字符串
	ifstream in;
	int sum=0;      //保存总校验和
	int len;
	in.open("text.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值