crc算法c++语言实现,C++开发之CRC校验实例详解
C++开发之CRC校验实例详解
CRC:(循环冗余校验)
循环冗余校验是数据通信领域中最常用的一种差错校验码,主要用来检测或校验数据传输或者保存后可能出现的错误。其特征是信息字段和校验字段的长度可以任意选定。
工作原理:
CRC检错方法的工作原理可以从发送端与接收端两个方面进行描述。
1)发送端将发送数据比特序列当作一个多项式f(x),用双方预先约定的生成多项式G(x)去除,求得一个余数多项式R(x)。将余数多项式加到数据多项式之后,一起发送到接收端。
2)接收端用同样的生成多项式G(x)去除接收到的数据多项式f'(x),得到计算余数R'(x)。如果计算余数多项式R'(x)与接收余数多项式R(x)相同,表示传输无差错;否则,表示传输有差错,通知发送端重传数据,直至正确为止。
eg:
1)发送数据比特序列为:f(x)=110011
2)生成多项式比特序列为:G(x)=11001 (N=5,k=4)
3)将发送数据比特序列乘以2的4次方,即产生的乘积为:1100110000
4)将乘积用生成多项式比特序列去除,按模2算法求得余数为:1001

5)将余数比特序列加到乘积中得:
1 1 0 0 1 1 + 1 0 0 1 = 1 1 0 0 1 1 1 0 0 1
6)如果在数据传输过程中没有发送错误,接收端收到的带有CRC校验码的数据比特序列一定能被相同的生成多项式整除:

CRC的检错能力:
1)能够检查出全部离散的1位错。
2)能够检查出全部离散的2位错。
3)能够检查出全部奇数错。
4)能够检查出全部长度小于或等于k位的突发错。
5)能以[1-(1/2)^(k-1)]的概率检查出长度为k+1位的突发错。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
时间: 2017-07-03

菱形继承 class Person { int _AA; }; class Student:public Person { int _BB; }; class Teacher :public Person { int _CC; }; class Assistant :public Student, public Teacher { int _DD; }; PS: Assistant的对象中存在两份Person成员 菱形继承存在二义性和数据冗余 解决: 使用虚继承 首先不使用虚继承时: #incl
const是一个C++语言的限定符,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性.另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助. define与const的区别 1.define作用在预处理时,是简单地字符替换 2. const作用在编译时,具有类型检查的功能 3. const必须进行初始化 常量指针与指针常量 #include using std::endl; using std::cout
对于文件比较复杂的时候,为了获取文件中的信息,需要一些比较特殊的函数,比如,getline().replace().atoi,atof等 例子一,读取以下文件中的数据,并保存进一个类里面. 首先,类的定义如下,感觉是struct,但是按照struct的处理,我这段代码出错了,不知道什么问题,暂时po出来吧,有空看看. struct ImageLabel{ std::string imagePath;//save图片路径名 int faceBox[4];//输入点集的最外层包络矩形rect四个参数
C++ 类的继承与派生实例详解 继承性是面向对象程序设计最重要的特性之一,使软件有了可重用性,C++提供的类的继承机制. 继承与派生的概念 一个新类从已有的类那里获得已有的特性,这种现象称为类的继承.同样也可以说成已有的类派生出来了新的类.类A继承自类B也就是类B派生了类A.所以继承和派生的关系就像小学时把字句和被字句的造句一样.有了继承与派生后,就有了父类/基类与子类/派生类,C++中将类B称为父类/基类,将类A称为子类/派生类. 派生类的声明: #include u
C/C++语言宏定义使用实例详解 1. #ifndef 防止头文件重定义 在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成 一个可执行文件时,就会出现大量"重定义"的错误.在头文件中实用#ifndef #define #endif能避免头文件的重定义. 方法:例如要编写头文件test.h 在头文件开头写上两行: #ifndef TEST_H #define TEST_H //一般是文件名的大写 头文件结尾写上一行: #endif 这样一个工程文件里同时

数字的反转 (144) (0) Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 备注:当数字溢出时,则程序返回0. 解题思路: 1.用一个变量y(初始化为0)保存改变之后的值: 2.将x的个位取下来,并且y乘上10,然后对加上x; 3.判断y-x的个位除以10,时候等于变量y(防止数字溢出),如果不等于则返回0: 4.将x等于x除以10,进一位: 5.当x存在
项目中遇到一个需求,要把中国式的显示阿拉伯数字的方式改为欧式的,即每三位显示,中间用逗号隔开,比如12345678改成12,345,678的显示方式,下面就是javascript代码的具体实现: var iValue = 20002365879; //要转换的数字 var sValue = iValue+''; var aValue = new Array(); var iNum = sValue.length%3; var aResult; //转换结果 var index = 0; if(s

第一步.效果展示 图1.蓝色的进度条 图2.红色的进度条 图3.多条颜色不同的进度条 图4.多条颜色不同的进度条 第二步.自定义ProgressBar实现带数字的进度条 0.项目结构 如上图所示:library项目为自定义的带数字的进度条NumberProgressBar的具体实现,demo项目为示例项目以工程依赖的方式引用library项目,然后使用自定义的带数字的进度条NumberProgressBar来做展示 如上图所示:自定义的带数字的进度条的library项目的结构图 如上图所示:de
方法一:SELECT CAST('123' AS SIGNED); 方法二:SELECT CONVERT('123',SIGNED); 方法三:SELECT '123'+0; 以上这篇mysql字符串的'123'转换为数字的123的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.
java 字符串反转的实例详解 1.new StringBuffer("abcde").reverse().toString(); 2.通过char数组进行转换, 代码如下 package com.test.reverse; public class TestReverse { public static void main(String[] args) { // 声明任意字符串 String str = "abcde"; //将字符串转换成char[] char[

游戏效果如下图所示: 规则: 在4X5的格子中,有随机的互不相等的10个数,每个数据有两份(也就是20个数,有两两相等的十对),随机分布在20个格子中.游戏开始,弹出二十个数的序列.每次点击格子会显示当前格子中的数据并暂时保留显示,直到下一次点击,如果下一次点击显示的数据与保留的数据不同,则之前点击保留的数据会消失(仍然存在于该格子但不显示).如果连续点击显示的两个数据一样,则两个数据都会显示并且不会再消失. 直到所有数据都通过连续点击相同数据的方式显示出来,就算游戏结束,报出游戏用时.此时可以
代码如下,U我认为对于新手来说最重要的是学会rnn读取数据的格式. # -*- coding: utf-8 -*- """ Created on Tue Oct 9 08:53:25 2018 @author: www """ import sys sys.path.append('..') import torch import datetime from torch.autograd import Variable from torch im
我就废话不多说了,大家还是直接看代码吧~ package c10; import java.util.Scanner; public class zhengzhengshu { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("输入一个正整数:"); int num = input.nextInt(); while (num != 0)
本文实例讲述了javascript常见数字进制转换的方法.分享给大家供大家参考,具体如下: 基本思路是先把其他进制的转化成 十进制,然后再转化.这个过程是利用parseInt函数,例如把一个16进制的数字(num)转化成10进制,num = parseInt(num,16). 如果再想把它转化成二进制的,就是如下:num.toString(2) . 这其中关于16进制的一个函数也很特别,escape函数可以将一个字符串转化成16进制的数字. 下面是一个综合的例子: var a = escape(
本文实例分析了JS返回只包含数字类型的数组实现方法.分享给大家供大家参考,具体如下: 实现效果如:js123ldka78sdasfgr653 => [123,78,653] 一般做法 分析: 1.循环字符串每个字符,是数字的挑出来拼接在一起,不是数字的,就给他空的拼个逗号 2.将新字符串每一位转换为数组,再次遍历,存在的挑出来,即得到结果 var str="js123ldka78sdasfgr653"; var new_str=""; var arr=[];
更多推荐
所有评论(0)