计算机网络中,16位校验和的实现
2017-12-01 18:54
211 查看
#include <iostream> #include <fstream> #include <stdio.h> #include <stdlib.h> #include <conio.h> using namespace std; struct M { int hegiht; int low; }; struct MM { M m1; M m2; }; MM add(MM g1, MM g2) { MM demo; int f[4] = { 0 }; int ff[4] = { 0 }; int c1, c2, c3, c4; c1 = g1.m2.low + g2.m2.low; if (c1 >= 16) f[3] = 1; c2 = g1.m2.hegiht + g2.m2.hegiht; if (c2 >= 16) f[2] = 1; c3 = g1.m1.low + g2.m1.low; if (c3 >= 16) f[1] = 1; c4 = g1.m1.hegiht + g2.m1.hegiht; if (c4 >= 16)f[0] = 1; /* if ((c1 + f[0]) / 16) ff[3] = 1; demo.m2.low = (c1 + f[0]) % 16; if ((c2 + f[3] + ff[3]) / 16) ff[2] = 1; demo.m2.hegiht = (c2 + f[3]+ff[3]) % 16; if ((c3 + f[2] + ff[2]) / 16) ff[1] = 1; demo.m1.low = (c3 + f[2]+ff[2]) % 16; demo.m1.hegiht = (c4 + f[1]+ff[1]) % 16;*/ demo.m2.low = (c1 + f[0]) % 16; demo.m2.hegiht = (c2 + f[3]) % 16; demo.m1.low = (c3 + f[2]) % 16; demo.m1.hegiht = (c4 + f[1]) % 16; return demo; } void show(MM key) { char a, b, c, d; if (key.m1.hegiht>9)a = key.m1.hegiht - 10 + 'A'; else a = key.m1.hegiht + '0'; if (key.m1.low>9)b = key.m1.low - 10 + 'A'; else b = key.m1.low + '0'; if (key.m2.hegiht>9)c = key.m2.hegiht - 10 + 'A'; else c = key.m2.hegiht + '0'; if (key.m2.low>9)d = key.m2.low - 10 + 'A'; else d = key.m2.low + '0'; cout<<a<<b<<c<<d<<endl; } int main() { FILE *fp; char ch;//保存每个字节 int chh, chl;//保存字符的高位和低位 MM u1, key; key.m1.hegiht = 0; key.m1.low = 0; key.m2.hegiht = 0; key.m2.low = 0; int fl; unsigned int count = 0, checknum = 0, k = 0; unsigned long int sum = 0; if ((fp = fopen("1.txt", "r")) == NULL) cout << "file open error!"; while (true) { if ((ch = fgetc(fp)) != EOF) { chh = (int)ch / 16; chl = (int)ch % 16; count = count % 2; switch (count) { case 0: { u1.m1.hegiht = chh; u1.m1.low = chl; break; } case 1: { u1.m2.hegiht = chh; u1.m2.low = chl; key = add(key, u1); } } count++; //cout<<key.m1.hegiht<<key.m1.low<<key.m2.hegiht<<key.m2.low<<endl; } else { break;//当读取到最后,则退出循环 } } if (count == 0) { u1.m2.hegiht = 0; u1.m2.low = 0; key = add(key, u1); } show(key); fclose(fp); }
算法思路:
打开要校验的文本文件,
每个字符得读取,直到读取到文件最后
通过该字符的acaii变化成16进制表示
然后保存并和下一个字符组成一个双16进制表示的数值
然后累加
返回累加值
相关文章推荐
- 计算机网络—实现零比特插入法(代码)
- ACE代码示例:实现计算机网络授时的小程序
- 使用手机网络及云技术实现可移动计算机?
- 如何实现在程序中进行网络计算机的用户验证
- 【计算机网络】网络诊断工具ping的模拟实现之具体细节
- 【计算机网络】网络诊断工具ping的模拟实现之基础知识
- 计算机网络,协议实现,学习记录
- CS231n 卷积神经网络与计算机视觉 8 手把手实现神经网络分类
- 计算机网络【七】:可靠传输的实现
- 计算机网络课程设计--基于winpcap实现简单的抓包
- 计算机网络探究二之利用PHP实现登录验证之后上网
- 【计算机网络】网络诊断工具ping的模拟实现之搭建框架
- 计算机网络--http代理server的设计与实现
- 计算机网络【七】:可靠传输的实现
- 网络唤醒无需任何软件,实现局域网广域网远程唤醒计算机
- 利用Windows重定向器实现对网络计算机的读写
- NetTime——c++实现计算机时间与网络时间的更新
- 龙芯一号cpu网络计算机硬件设计与实现
- 【计算机网络实验二】crc编码(c++)实现
- WIZnet启动线下培训活动:计算机网络TCP/IP协议及其实现方法