计算机网络crc校验实验报告,CRC校验实现-实验报告(附主要实现代码)

计算机网络

实验报告

班级:03计算机B班

实验名称:CRC校验实现

姓名:kikikind

学号:086

指导老师:何怀文

日期:2006-4-22

1.学习CRC循环冗余检验原理

2.掌握实现方法

WindowXp+sp2 , VC++ 6.0/MFC

三.实验任务

1.通过学习CRC原理,验证,检错,掌握其工作原理;

2.编写CRC编码程序;

3.总结实验过程,编写提交实验报告:方案、编程、调试、结果、分析、结论。

四.CRC编程实现

1.程序设计

1.以图型界面方式显示,可选择编码方式

i.CRC16

ii.CRCCCIT

iii.CRC32

iv.自定义多项式

2.MFC实现

3.自定义编码数据(十进制方式)

4.显示生成编码与余数

5.检验正确性

2.十进制转二进制(以下是具体函数)

具体算法:

//1.找不出大于转换数的最大2^n

//2.转换数减去2^n,再找不大于新的当前数

//3.当前数大于2^n时置1,小于时置0,同时2^n/2

void CCRC::DecToBinary( CString & ChangeString )

{

if ( ChangeString.IsEmpty())

return;

unsigned long num = atol(ChangeString.GetBuffer(ChangeString.GetLength()));

unsigned long temp = 1;

int k = 0;

//求出最大不超过当前数的2次幂,设置字符串长度

while ( temp < num )

{k++; temp*=2; }

//设置字符串长度

ChangeString.GetBufferSetLength(k);

ChangeString.SetAt(0,'1');

temp /= 2;

num -= temp;

//num为当前数, temp保存不大于num的最大2^n数,

k = 1;

while( num >= 0 && temp != 0)

{

//这句很重要,每设一位0 or 1 temp都要/2

temp /= 2;

//当前数比2^n少时,就置0

while( num < temp )

{

ChangeString.SetAt(k++,'0');

temp /= 2;

}

//如果减尽,即当前数num=0的话,最后一位置0,其它情况时是num > temp所以置一

if ( num != 0)

ChangeString.SetAt(k++,'1');

num -= temp;

}

}

3.转换编码(以下是具体函数)

//编码

//strChange编码的字符串strPoly生成多项式SaveRadius保存余数字符串

bool CCRC::CRC_Code(CString strChange, CString strPoly, CString & SaveRadius, bool isTest )

{//除数,每次运算的模2数,余数

char * Buf;

int ChangeLen,PolyLen;

int StrPos, Pos, BufPos;

bool isLast = false;

ChangeLen = strChange.GetLength();

PolyLen = strPoly.GetLength();

//初始化各数组长度(保存多项式的二进制字符串长度即为最高次数,+1位是用来保存结束符)

Buf = new char[PolyLen+1];

//如果不是用于测试,是在多项式后尾添0

if ( !isTest )

{

strChange.GetBufferSetLength( ChangeLen + PolyLen);

StrPos= ChangeLen;

ChangeLen = ChangeLen + PolyLen - 1;

while ( StrPos < ChangeLen )

strChange.SetAt(StrPos++,'0');

strChange.SetAt(StrPos,'/0');

}

//进行模2除

StrPos = PolyLen;

Pos = 0;

while( Pos < PolyLen )

{

Buf[Pos] = strChange.GetAt(Pos);

Pos++;

}

//从多项式长开始向右扫

while( StrPos <= ChangeLen )

{

Pos = 0;

isLast = false;

//单次多项式除

while ( Pos < PolyLen)

{

if ( Buf[Pos] == strPoly.GetAt(Pos) )

Buf[Pos++] = '0';

else

Buf[Pos++] = '1';

}

//调整buf,如不是最后一次,则将buf中从第一个不为0的数开始将数向前移

BufPos = 0;

Pos = 0;

//找出第一个不为1的字符,如果全为0,表示已除完

while ( Buf[BufPos++] != '1' && BufPos< PolyLen);BufPos--;

if ( StrPos == ChangeLen -1 && BufPos > 1)

{

BufPos = 2;

isLast = true;

}

//本身转移

if ( BufPos > ( ChangeLen - StrPos ))

{

BufPos = ChangeLen - StrPos + 1;

isLast = true;

}

while( BufPos < PolyLen )

Buf[Pos++] = Buf[BufPos++];

//如果是最后一次就跳出去

if ( StrPos == ChangeLen )

break;

//填充从转换串的新字符

while( Pos < PolyLen && StrPos < ChangeLen )

Buf[Pos++] = strChange.GetAt(StrPos++);

//控制最后一轮

if ( isLast )

break;

}

Buf[PolyLen-1] = '/0';

SaveRadius = CString(Buf);

delete [] Buf;

return ( atol(SaveRadius.GetBuffer(SaveRadius.GetLength())) == 0 );

}

4.检查正确性

设置编码函数最后一个参数isTest为TURE,则不会在转换串后添0,重新计算一次,保存返回值,如果为0,则表示编码成功!

五.附件

l附件有实现程序,可直接运行

l可能存有不足,测试基本正常

l完整源程序

六.程序介绍

l采用计算法,以数组方式存放二进制字符串模拟手工计算

l可自定义校检多项式

l生成校检码检查,验证生成式的正确性

(由于水平有限,可能程序仍然存在很多不足,请老师多多指教!如有任何问题或疑问可发邮件至邮箱:与我联系,谢谢)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【APIO2015】完跪记

APIO2015 这次完美跪了&#xff0c; 什么牌都没有拿到 Day -1 第一天早上5点起床吃了个饭去赶飞机和其他中学的人回合了&#xff0c;在车上复习了一下后缀数组&#xff0c;一边复习&#xff0c;一边听歌&#xff0c;结果最后还是挂了。。只能跪拜大神了。下午到了北京南开的人…

前端学习(1477):计算属性文档分析

当数据的逻辑很复杂的时候 下载计算属性中

万能点位图软件_红色网格衣+很多漂亮的花边像素图,绣手帕花边的十字绣图...

下雨天手工——万能像素图十字绣刺绣&#xff0c;珠绣拼豆豆&#xff0c;钩针棒针提花&#xff0c;手工万能图解&#xff0c;点击文字&#xff0c;进入相应文章。【像素图1~100期大合集】【2019像素图大合集】【像素图&#xff0c;人见人爱的用法合集&#xff01;】【钩针像素毯…

html escape函数,JavaScript中escape()函数的使用方法

导语&#xff1a;我们在传递参数时&#xff0c;为了避免服务器端出现乱码&#xff0c;常常会要用到编码函数&#xff0c;urlencode、HtmlEncode、base64_encode等。本文给大家详细讲解JavaScript中escape()函数的使用方法。在很多脚本语言的应用当中,escape函数是一个可转换编码…

LeetCode House Robber 家庭劫犯(dp)

题意&#xff1a;有一个整数序列&#xff0c;从中挑出一些数字&#xff0c;使得总和是最大&#xff0c;前提是&#xff0c;相邻的两个数字中只能挑其一。比如1 2 3 就只能挑2或者1和3。 思路&#xff1a;很直观的题&#xff0c;dp思想。降低规模&#xff0c;从小规模开始考虑。…

matlab画线不同颜色_怎样画线框图才有意义?

本文由 Jonathan 译自 https://medium.muz.li/how-to-succeed-in-wireframe-design-2ab3cd5c4bc9我们常轻忽身边习以为常的事物&#xff0c;觉得没有必要为一些看似简单又可有可无的东西浪费时间——例如线框图。虽然没必要凡事都寻根问底&#xff0c;但当面对复杂问题时&#…

计算机应用基础第五章在线测试答案,计算机应用基础在线测试第五章答案

参考答案如下计算机【单选题】休克Ⅰ期机体出现的代偿反应 不正确 的是用基语义之间的组合关系是指词之间的______。在没有光的时候&#xff0c;线测我们看不到任何物品的色彩。【多选题】在一幅好的风景作品中&#xff0c;试第即使是平面的&#xff0c;我们也感觉的到远近的感…

testNG之组测试

Test(groups {""}) 在执行测试用例的时候&#xff0c;往往一个功能依赖多个测试用例&#xff0c;比如流程的测试&#xff0c;那么这个时候就可以用到组测试&#xff0c;把流程涉及到测试用例都分到同一组里&#xff0c;按组执行即可。 testNG的组通过Test的groups属…

html按钮不可选中,如何使HTML文本不可选择

小编典典用普通的HTML无法做到这一点&#xff0c;因此JSF在这里也无法为您做很多事情。如果您仅针对体面的浏览器&#xff0c;则只需使用CSS3&#xff1a;.unselectable {-webkit-touch-callout: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: n…

小米手机扩容教程_小米笔记本硬盘扩容教程:5分钟搞定,存储容量瞬间翻倍...

想要了解更多热门资讯、玩机技巧、数码评测、科普深扒&#xff0c;可以点击右上角关注我们的百家号&#xff1a;雷科技----------------------------------现在&#xff0c;固态硬盘在笔记本上基本上已经普及了&#xff0c;相比机械硬盘&#xff0c;它的优势很明显&#xff0c;…

[转]你所不知道的超级瘦腿运动——空中蹬自行车

转自&#xff1a;http://weibo.com/p/1001603808616690912493?frompage_100505_profile&wvr6&modwenzhangmod 看似平淡无奇&#xff0c;实则大有文章。普通的蹬法1000个也没用&#xff0c;海龟版本的蹬法每天30个就可以修炼出绝世美腿、平坦小腹、并且有效改善X、O型腿…

计算机快捷键知识点,电脑常用快捷键基础的知识点(12页)-原创力文档

电脑常用快捷键基础知识按” shift ”&#xff0b;”6” 是省略号……&#xff0c;方法&#xff1a; shift6 (主键盘上的 6&#xff0c;就是 Y 键对上去的那个 6), 前提是在你有五笔输入法的状态栏上 , 必须是中文标点 , 就是有个软件盘的旁边那个标点符号必须是空心的 .)另一个…

pandas用均值填充nan_python – 如何用pandas中的滚动平均值填充nan值

这应该工作&#xff1a;input_data_frame[var_list] input_data_frame[var_list].fillna(pd.rolling_mean(input_data_frame[var_list], 6, min_periods1))请注意,窗口为6,因为它包含NaN本身的值(不计入平均值).此外,其他NaN值不用于平均值,因此如果在窗口中找到的值少于5个,则…

Java 默认/缺省 内存大小,如果没有 -Xms -Xmx

命令 java -XX:PrintCommandLineFlags -version 会直观的输出下面默认值 -XX:InitialHeapSize16336768 -XX:MaxHeapSize522776576 -XX:PrintCommandLineFlags 转载于:https://www.cnblogs.com/tang88seng/p/4498866.html

html菜鸟ruby,Ruby 循环

Ruby 循环Ruby 中的循环用于执行相同的代码块若干次。本章节将详细介绍 Ruby 支持的所有循环语句。Ruby while 语句语法whileconditional[do]codeend或者语法whileconditional[:]codeend当 conditional 为真时&#xff0c;执行 code。语法中 do 或 : 可以省略不写。但若要在一行…

jenkins是什么_使用 Jenkins 自动发布服务到 Kubernetes

使用 Jenkins 自动发布服务到 KubernetesJenkins 是什么一个比较流行的开源 CI/CD 工具CI/CD : 持续集成/持续部署Kubernetes 是什么容器化工具 -- 一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;Kubernetes的目标是让部署容器化的应用简单并且高…

2015.5.12站立会议

昨天我们将查阅的资料汇总&#xff0c;并进行了了解和分析&#xff0c;每个人都发表了自己在查阅资料过程中的认识和对这部分的理解&#xff0c;大家交换了意见。 今天我们准备将所了解的内容代码化&#xff0c;每人编写一部分代码&#xff0c;利用所查找的资料。 遇到的问题&a…

grav html5,如何通过html5实现摇一摇的功能

原理&#xff1a;使用DeviceMotion实现&#xff0c;关于DeviceMotion介绍可以查看https://developer.mozilla.org/en-US/docs/Web/Reference/Events/devicemotion通过DeviceMotionEvent&#xff0c;可以获得accelerationIncludingGravity的x,y,z属性&#xff0c;根据x,y,z属性的…

WPF DataGrid

前台代码 <DataGrid Name"gv_GetWork" AutoGenerateColumns"False" CanUserSortColumns"False" CanUserAddRows"False" Margin"5"> <!--鼠标经过事件--> <DataGrid.RowStyle> <Style TargetType"…

小程序怎么打出横线效果_成都小程序开发:哪些因素会影响小程序的运营效果?...

相信现在微信小程序对于大家来说都不陌生了&#xff0c;目前小程序在市场中的占有率比较高&#xff0c;也是用户比较喜欢的平台。对于初次开发小程序的企业商家&#xff0c;在小程序的开发运营时&#xff0c;往往会有一些细节性的问题&#xff0c;影响到小程序的运营效果。我们…