CRC 循环冗余效验
CRC循环冗余效验 利用多项式 x6 + x4 + x3,实际为使用模2除法来做的加密
常用crc多项式有
名称 |
生成多项式 |
数值式 |
简记式 |
标准引用 |
CRC-4 |
x4+x+1 |
0x1’3 |
0x3 |
ITU G.704 |
CRC-8 |
x8+x5+x4+1 |
0x1’31 |
0x31 |
|
CRC-8 |
x8+x2+x1+1 |
0x1’07 |
0x07 |
|
CRC-8 |
x8+x6+x4+x3+x2+x1 |
0x1’5E |
0x5E |
|
CRC-12 |
x12+x11+x3+x2+x+1 |
0x1’80F |
0x80F |
|
CRC-32c |
注** |
0X1’1EDC6F41 |
0x1EDC6F41 |
SCTP |
多项式即要验证数据的除数
过程
a.生成 循环效验的余数 例如;要发送的数据a 对 指定除数模2取余数b(例如crc32的除数0x1EDC6F41),
b.发送数据为a+b,长度len(a)+len(b)
然后发送给目标:
接收之后:
1.对收到的数据 用指定除数(如过程a)进行模2取余数b,
2.如果余数为0,则效验成功,否则失败
区中模2除法取余核心为代码:思路使用deque,然后pushback,分别异或算法
代码如下:
// CRC.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// #include <iostream>
#include <vector>
#include <math.h>
#include <cmath>
#include <deque>
using namespace std; //二进制的位数
int GetBitNum(int n)
{
int i = 0;
while (n > 0)
{
n = n >> 1;
i++;
}
return i;
}
bool GetBitAt(int n, int pos)
{
int m = 1 << pos;
int nRes = n & m;
return (n & m) > 0;
}
int Left(int n, int count)
{
int num = GetBitNum(n);
return n >> (num - count);
}
int Right(int n, int count)
{
int n1 = n >> count;
n1 = n1 << count;
return n ^ n1;
} int Mod(int m, int n)
{
std::deque<int> dqM;
std::deque<int> dqN; int nlen = GetBitNum(n);
int mlen = GetBitNum(m);
for (int i = 0; i < nlen; i++)
{
int nb = GetBitAt(n, i) ? 1 : 0;
cout << nb;
dqN.push_front(nb);
}
cout << endl;
for (int i = 0; i < mlen; i++)
{
//
int nb = GetBitAt(m, i) ? 1 : 0;
dqM.push_front(nb);
cout << nb;
}
cout << endl; while (dqM.size() > dqN.size())
{
//这里做运算
for (int i = 0; i < dqN.size(); i++)
{
dqM[i] = dqM[i] ^ dqN[i];
}
while (dqM.size() > 0 && dqM.front() == 0)
{
dqM.pop_front();
}
}
int t = 0;
for (int i = 0; i < dqM.size(); i++)
{
t += 2 << (dqM.size() - i - 1);
}
return t;
}
void printbool(bool bPrint)
{
if (bPrint)
cout << 1;
else
cout << 0;
} int main()
{
/*int n = 1 ^ 1;
cout << n << endl;
n = 1 ^ 0;
cout << n << endl;
n = 0 ^ 1;
cout << n << endl;
n = 0 ^ 0;
cout << n << endl;*/ //m为要发送的数据
//n为多项式 1001:= x4+1:
//余数为要发送的数
//效验过程, 发送的数据除以多项式 余数为0即校验成功 int m = 12344556;
int n = 9;
int mod = Mod(m, n);
//发送的数字为m+n
int mlen = GetBitNum(m);
//长度
int nReal = mlen + GetBitNum(mod); int nRealSend = m << GetBitNum(mod) + m;
int nn = Mod(nRealSend, n);
cout << nn << endl; return 0;
}
CRC 循环冗余效验的更多相关文章
- Redis源代码分析(23)--- CRC循环冗余算法RAND随机数的算法
他今天就开始学习Redis源代码的一些工具来实现,在任何一种语言工具.算法实现的原理应该是相同的,一些比較经典的算法.比方说我今天看的Crc循环冗余校验算法和rand随机数产生算法. CRC算法全称循 ...
- CRC循环冗余检测C语言实现----花了几天时间乱写的
由于笔者目前正在上计算机网络的课,老师要我们编一下crc的循环检测过程,所以我想着刚好在学c,那就随便看看写不写的了,首先百度了一下网上资料,基本都是用位移运算符实现的,由于本人懒得去看一下位移运算, ...
- crc循环冗余校验
循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误.它 ...
- LRC CRC 纵向冗余码校验
LRC CRC 纵向冗余码校验 2010-01-26 11:00:15| 分类: 电气 | 标签: |字号大中小 订阅 1.LRC校验 LRC域是一个包含一个8位二进制值的字节.LRC值由 ...
- crc循环冗余检验
CRC(Cyclic Redundancy Check):循环冗余检验.在链路层被广泛使用的检错技术. CRC原理: 1.发送端 1.1.在发送端先将数据分组,每组k个数据.假定要传送的数据是M. 1 ...
- CRC碰撞
循环冗余效验(Cyclic Redundancy Check, CRC) 是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误. ...
- [技术栈]CRC校验原理及C#代码实现CRC16、CRC32计算FCS校验码
1.CRC.FCS是什么 CRC,全称Cyclic Redundancy Check,中文名称为循环冗余校验,是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检 ...
- PNG图片数据解析
PNG是一种非常流行的图片格式,它不仅支持透明效果,而且图片数据经过了压缩处理,所以广泛用于web等应用. PNG的文件格式: PNG文件中的数据,总是以一个固定的8个字节开头: (图片来自http: ...
- 关于图片的PNG与JPG、JIF格式
一:GIF(Graphics Interchange Format) 简介 GIF图形交换格式是一种位图图形文件格式,以8位色(即256种颜色)重现真彩色的图像. 它实际上是一种压缩文档,采用LZW压 ...
- 前端进阶试题css(来自js高级前端开发---豪情)既然被发现了HOHO,那我就置顶了嘿嘿!觉得自己技术OK的可以把这套题目做完哦,然后加入高级前端的社区咯
http://www.cnblogs.com/jikey/p/4426105.html js高级前端开发加群方法(此群很难进,里面纯技术,严禁广告,水群) 完整题目做完发邮箱(jikeytang@16 ...
随机推荐
- 三元运算符 JAVA12
Java 提供了一个特别的三元运算符(也叫三目运算符) 表示:条件运算符的符号表示为"? :",使用该运算符时需要有三个操作数,因此称其为三目运算符. 举例一 int x,y,z; ...
- Android 13 - Media框架(22)- ACodec(四)
关注公众号免费阅读全文,进入音视频开发技术分享群! 前面两节我们了解了 ACodec 的创建及配置流程,配置完成后 ACodec 进入了 LoadedState,这一节开始将会了解 ACodec 的启 ...
- Android项目代码规范
项目代码规范 Android Studio的代码Style检查和inspect Code功能已经很强大,规范只负责代码结构和文件结构 带?的内容为可选或团队内协商内容 核心目标 提高可维护性: MVV ...
- 用C++ Qt实现类似Photoshop的钢笔工具
因为工作上的需求,需要实现一个类似Photoshop里面的钢笔工具, 分析一下它的功能,包括: 1. 有两种点:节点和控制点,节点是构成图形的基本端点,控制点是影响贝塞尔曲线的系数. 2. 创建节点: ...
- knife4j/swagger救援第一现场
1.前方来报,测试环境springboot项目无法启动,现场如下: Error starting ApplicationContext. To display the auto-configurati ...
- C# ML.NET 使用GPU遇到 Failed to get convolution algorithm.This is probably because cuDNN failed to initialize
C# ML.NET 使用GPU遇到 Failed to get convolution algorithm.This is probably because cuDNN failed to initi ...
- 夜莺监控 V7 第二个 beta 版本发布,内置集成故障自愈能力,简化部署
经过一个半月的打磨改进,夜莺监控 V7 第二个 beta 版本发布了,本次发布的主要亮点是内置集成故障自愈能力,简化架构,同时做了其他 19 项改进.一些重要的改进如下: feat: 集成故障自愈的能 ...
- readonly和disable的区别是什么?
Readonly和Disabled两种属性的写法如下: 1.<input type="text" name="name" value="xxx& ...
- 前端学习之nvm
接手了新的项目 需要使用nodejs,但是版本又不同如何解决呢 如果自己下载配置环境变量也太复杂了 下载nvm https://nvm.uihtm.com/download.html 使用nvm 下载 ...
- 洛谷 P1226 快速幂
题目链接:快速幂 思路 简单快速幂模板.a ^ 17 = (a ^ 2) ^ 8 * a,此时pow()中的y就可以视为17 -> 8(y >>= 1),pow()中的x就是底数a ...