/*
编写一个程序,能够根据输入的原始数据,及所选择的多项式,自动生成CRC校验码。
算法参考:https://www.bilibili.com/video/BV1V4411Z7VA

建议根据上面的链接自己敲一遍,再对比我的代码,一起学习。
*/
#define N 50
#include<string>
#include<vector>
#include <algorithm>
#include<iostream>
using namespace std;
int arr[N];//存放为1的数
static int cot = 0;//指针偏移
void numFun(char num) //遍历多项式系数标记系数为1的数
{
    if ('1'==num) 
    {
        arr[cot] = 1;
    }
    cot++;
}
int main()
{
    string rawData;//原始数据
    string num;//系数
    cout << "请输入原始数据:" << endl;
    cin >> rawData;
    cout << "请输入多项式的各项系数:" << endl;
    cin >> num;
    rawData.append(num.size()-1,'0');
    string::iterator ite=num.end();
    string::iterator ite0 = num.begin();
    for_each(ite0+1, ite,numFun);
    vector<char>vec(num.size(),'\0');//容器
    vector<char>::iterator ite1 = vec.end()-1;
    vector<char>::iterator ite2 = vec.begin();
    for (size_t i=0;i<vec.size();i++) //容器初始化
    {
        *ite2 = rawData[i];
        ite2++;
    }
    for (size_t i=0;i<rawData.size()-vec.size();i++) //求CRC校验码
    {
        ite2 = vec.begin();
        if ('1'==*ite2) 
        {
            for (int i=0;i<cot;i++) 
            {
                if(1==arr[i])
                {
                    if ('1'==vec[i+1]) 
                    {
                        vec[i + 1] = '0';
                    }
                    else if ('0'==vec[i+1]) 
                    {
                        vec[i + 1] = '1';
                    }
                }
            }
        }
        for (size_t i=0;i<vec.size()-1;i++) 
        {
            vec[i] = vec[i + 1];
        }
        *ite1 = rawData[vec.size()+i];
    }
    cout << "CRC校验码为:" << endl;
    for (size_t i=1;i<vec.size();i++) 
    {
        cout << vec[i];
    }
    system("pause");
    return 0;
}

C++ 实现CRC循环冗余校验码相关推荐

  1. CRC循环冗余校验码总结

    一.CRC简介 先在此说明下什么是CRC:循环冗余码校验 英文名称为Cyclical Redundancy Check,简称CRC,它是利用除法及余数的原理来作错误侦测(Error Detecting ...

  2. CRC 循环冗余校验码 的计算方法

    循环冗余校验CRC(Cyclical Redundancy Check)字段位于尾部,有32位,有时称为IEEE/ANSI标准的CRC32.要使用一个n位CRC监测 数据传输错误,被检查的消息首先要追 ...

  3. 16位CRC循环冗余校验码生成函数

    16位的CRC校验码生成,可使用以下函数: //16位CRC校验码生成 //返回值:CRC校验码 unsigned int CRC_check(unsigned char *addr,int num) ...

  4. 循环冗余校验码CRC原理和实例

    今天同事问了一个CRC(循环冗余校验码)的问题,好奇心之下学习了一下. 首先说它的原理,百度百科上也有,我就简单说一下,它其实就是采用多项式编码的方法,对于要发送的信息码R,发送方和接收方约定好多项式 ...

  5. CRC循环冗余校验是如何纠错的

    引言 昨天同学突然问我CRC循环冗余校验是如何纠错的?我突然大脑一片空白,学过校验码自然知道CRC循环冗余校验码是可以检错和纠错,但是仿佛只知道求出检验码和检错的过程,但是不知道如何纠错的过程,查询书 ...

  6. 循环冗余校验码CRC,求解步骤

    循环冗余校验码CRC,是软考-计算机组成原理 中一种重要的编码. 下面只是简要描述求解CRC码的解题步骤,面向有一定理论基础的朋友. 直接看例题. 例.信息位: 10100110   生成多项式: 解 ...

  7. 第二章 数据的表示和运算 2.1.6 循环冗余校验码/CRC码 [计算机组成原理笔记]

    第二章 数据的表示和运算 2.1.6 循环冗余校验码/CRC码 本笔记参考书目: 计算机组成原理(第六版.立体化教材)白中英.戴志涛 2021王道计算机组成原理视频公开课 本节重点: 循环冗余校验码/ ...

  8. 计算机组成原理:循环冗余校验码CRC具备“一位纠错”功能的思考与探索

    笔者在阅读华中科技大学谭志虎老师主编的<计算机组成原理(微课版)>教材进行复习时,产生了一个疑问,并针对性地进行了一些思考.欢迎广大复习到这里同样有问题的同学(寒假开学接着考试实在有点汗, ...

  9. 计算机系统基础知识——循环冗余校验码(CRC)

    前言:循环冗余校验码(cyclie redundancy check)简称CRC(循环码),是一种能力相当强的检错.纠错码,并且实现编码和检码的电路比较简单,常用于串行传送(二进制位串沿一条信号线逐位 ...

  10. 奇偶校验码 、循环冗余校验码(CRC)、 海明码

    在计算机运行时,为保证二进制数据在传输时准确无误,通常利用校验码来检测并纠错传输的数据.所谓码距就是任意合法编码之间至少有多少个二进制位不同.例如: 码距位1的"8 1 4 2" ...

最新文章

  1. 视频 网站 页面开关灯实现方法
  2. activity 启动模式_腾讯大牛:你根本不懂Activity!
  3. 三角形圆形创建与擦除java_设计模式---------------简单工厂模式
  4. 15. 三数之和(双指针)
  5. C++学习笔记(草稿版)
  6. UE4 HTC VIVE - 番外篇 - 局域网联机三
  7. vue 实例的生命周期
  8. 系统分析与设计 HW9
  9. 计算机类电影制作专业大学,大学本科计算机专业 电影资讯类APP的设计与实现毕业论文.doc...
  10. GIS制图的基础三点
  11. python基金比较上机题_使用python筛选基金
  12. 如何用Ps用高斯模糊
  13. KVM+OVS环境虚机修改网卡为ovs网桥后启动报错
  14. Linux命令之查找命令
  15. 获取浏览器具体的下载链接地址,通过迅雷下载
  16. <<前端进阶篇>> PDF 出炉了 — 「阿宝哥」,精心准备的 6 万多字 170 页的前端进阶资料
  17. msys 的安装和使用
  18. php mcrypt模块,PHP模块mcrypt模块安装
  19. 离散卷积的c语言编程实验,数字信号处理实验一离散卷积c语言编程.ppt
  20. Autodesk Inventor Publisher 2013安装破解

热门文章

  1. 冯乐乐之二 shader的数学
  2. android 应用升级,系统做了什么?
  3. 前端实现动画的方法总结
  4. 微波雷达智能感应模块,在智能面板上的技术应用
  5. realtek 8111E 网卡 修改MAC 地址
  6. java表白我爱你代码_微信翻译代码我爱你怎么写 微信翻译表白代码大全
  7. cadz轴归零命令_cadz轴归零(cad全部z轴归零)
  8. mysql pxc缺点_MYSQL高可用之PXC
  9. html鼠标悬停多个效果,33个jQuery与CSS3实现的绚丽鼠标悬停效果
  10. FFmpeg采集树莓派USB摄像头(UVC摄像头)