精华内容
下载资源
问答
  • 2018-06-22 23:40:47
    #include<stdio.h>
    #include<stdlib.h>
    int count_n(char s[])
    {
        int i=0,count=0;
        while(s[i]!='\0')
        {
            count++;
            i++;
        }
        return count;
    }
    
    int mod2_div(char sx[],char sn[],int nx,int n)
    {
        int num;
        int i=0;
        while(i<=nx-n)
        {
            if(sx[i]!='0')
            {
                int j=i,k=0;
                for(;j<=i+n-1;j++,k++)
                {
                    if(sx[j]=='1'&&sn[k]=='1')
                    {
                        sx[j]='0';
                    }
                    else if(sx[j]=='1'&&sn[k]=='0')
                    {
                        sx[j]='1';
                    }
                    else if(sx[j]=='0'&&sn[k]=='0')
                    {
                        sx[j]='1';
                    }
                    else
                    {
                        sx[j]='1';
                    }
                }
                i++;
            }
            else
            {
                i++;
            }
        }
        printf("%s\n",sx);
        num=atoi(sx);
        return num;
    }
    
    int main()
    {
        char s1[20];    //发送端数据
        char s2[20];    //接收端数据
        char s3[8];     //双方约定的除数
        int res1,res2;        //余数
        int nx,n,i,ny;
        printf("请输入发送端数据,最多不超过12位!\n");
        scanf("%s",s1);
        printf("请输入接收端数据,最多不超过12位!\n");
        scanf("%s",s2);
        printf("请输入双方约定的除数,最多不超过8位!\n");
        scanf("%s",s3);
        nx=count_n(s1);
        i=nx;
        n=count_n(s3);
        nx=nx+n-1;
        printf("%d %d %d\n",i,nx,n);
        for(;i<=nx-1;i++)
        {
            s1[i]='0';
        }
        s1[nx]='\0';
        printf("%s\n",s1);
        res1=mod2_div(s1,s3,nx,n);
        ny=count_n(s2);
        res2=mod2_div(s2,s3,ny,n);
        printf("res1:%d res2:%d\n",res1,res2);
        if(res1==0)
        {
            if(res2==0)
            {
                printf("数据正确-1!");
            }
            else
            {
                printf("数据错误-1!");
            }
        }
        else
        {
            if(res1%res2)
            {
                printf("数据错误-2!");
            }
            else
            {
                printf("数据正确-2!");
            }
        }
        return 0;
    }

    更多相关内容
  • C语言实现CRC16校校验

    2018-05-23 13:20:48
    C语言实现标准CRC16校验 ,文件包含crc.h 和crc.c,有问题可以 私聊我 q-175-543-7233
  • 用了一天时间研究了CRCC语言实现,理解和掌握了基本原理和C语言编程。结合自己的理解简单写下来。 1、CRC简介 CRC检验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个...
  • C语言实现CRC校验

    2021-05-19 18:32:26
    #include #include // 转化后的二进制最多的位数#define MAX_BIN_LENGHT 100// 输入的表达式最多的字符数#define MAX_EXP_LENGHT 100// 根据表达式得到二进制数void...// 根据两个二进制数,得到CRC校验结果void get...

    #include

    #include

    // 转化后的二进制最多的位数

    #define MAX_BIN_LENGHT 100

    // 输入的表达式最多的字符数

    #define MAX_EXP_LENGHT 100

    // 根据表达式得到二进制数

    void getBinary(char *express,int binary[MAX_BIN_LENGHT]);

    // 根据两个二进制数,得到CRC校验结果

    void getQuoRem(int *binaryY,int binaryG[MAX_BIN_LENGHT], int result[MAX_BIN_LENGHT]);

    // 打印二进制数

    void printBinary(int binary[MAX_BIN_LENGHT]);

    // 得到正序的二进制数

    void getOrderedBinary(int originalBinary[MAX_BIN_LENGHT],int orderedBinary[MAX_BIN_LENGHT]);

    // 得到二进制位数

    int getBinaryLength(int originalBinary[MAX_BIN_LENGHT]);

    int main(int argc,char *argv[])

    {

    int binaryY[MAX_BIN_LENGHT]={0}; // 存放Y(x)转化后的二进制数

    int binaryG[MAX_BIN_LENGHT]={0}; // 存放G(x)转化后的二进制数

    int binaryTemp[MAX_BIN_LENGHT]={0}; // 存放表达式转化后的倒序二进制数

    int binaryResult[MAX_BIN_LENGHT]={0}; // 存放最后要发送的加上校验码的数据

    char express[MAX_EXP_LENGHT]; //存放输入的表达式

    printf("请输入Y(x)表达式:\n");

    scanf("%s",express);

    getBinary(express,binaryTemp);

    getOrderedBinary(binaryTemp,binaryY);

    printf("请输入G(x)表达式:\n");

    scanf("%s",express);

    getBinary(express,binaryTemp);

    getOrderedBinary(binaryTemp,binaryG);

    // 得到有校验码的数据

    getQuoRem(binaryY,binaryG,binaryResult);

    printf("\nY(x)的二进制为:");

    printBinary(binaryY);

    printf("G(x)的二进制为:");

    printBinary(binaryG);

    printf("最终的CRC校验数据为:");

    printBinary(binaryResult);

    return 0;

    }

    /**********************

    * 根据表达式得到二进制数

    ***********************/

    void getBinary(char *express,int binary[MAX_BIN_LENGHT])

    {

    int i;

    int num=0;

    char tempc;

    // 让binary清零

    for(i=0;i

    {

    binary[i]=0;

    }

    // 求倒序的二进制

    for(i=0;i

    {

    if(*(express+i)=='^')

    {

    // 如果是^号,表示接下来的就是指数了

    for(i=i+1;i

    {

    tempc=*(express+i);

    if(tempc>='0' && tempc<='9')

    {

    num=num*10+(tempc-'0');

    if((i+1)>=strlen(express))

    {

    binary[num]=1;

    }

    }

    else

    {

    /*

    得到相应的指数,将对应的二进制位数设置为1。

    此时二进制的最低位对应的是binary[0],二进制的最高位对应的是binary[MAX_BIN_LENGHT-1]

    */

    binary[num]=1;

    num=0;

    break;

    }

    }

    }

    else

    {

    if(*(express+i)=='1'&& (i+1)>=strlen(express))

    {

    // 如果最后一个数字是1,那么二进制最低位binary[0]设置为1

    binary[0]=1;

    }

    i++;

    }

    }

    }

    /**************************

    * 根据两个二进制数,得到CRC校验结果

    * 参数: binaryY 二进制被除数

    * binaryG 二进制除数

    * quotient 商

    * remainder 余数

    * result 带校验码的最终结果

    **************************/

    void getQuoRem(int binaryY[MAX_BIN_LENGHT],int binaryG[MAX_BIN_LENGHT],int result[MAX_BIN_LENGHT])

    {

    int i,j,index=0,k;

    int lengthY,lengthG,lengthB;

    int quotient[MAX_BIN_LENGHT]={0}; // 存放商的二进制数

    int remainder[MAX_BIN_LENGHT]={0}; // 存放余数的二进制数

    lengthY=getBinaryLength(binaryY);

    lengthG=getBinaryLength(binaryG);

    if(lengthG>lengthY)

    {

    printf("除数比余数大!无法得到正确商和余数!");

    quotient[1]=-1;

    remainder[1]=-1;

    return ;

    }

    /*

    * 将被除数的后边加上除数对应的0,结果存入到result中。

    * 添加的0的个数与除数中x^n的最大指数值n相同

    */

    for(i=0;i

    {

    // 最终的结果前面与被除数相同

    if(i

    {

    result[i]=binaryY[i];

    }

    // 最终结果的后面填充相应个数的0

    else

    {

    result[i]=0;

    }

    }

    // result尾部加上结束符

    result[i]=-1;

    // 得到被除数总的位数长度

    lengthB=getBinaryLength(result);

    // 先得到最开始的余数

    for(i=0;i

    {

    remainder[i]=result[i];

    }

    // 循环得到商和余数

    for(i=lengthG-1;i

    {

    if(remainder[0]==1)

    {

    // 商1

    quotient[index]=1;

    // remainder余数与除数按位异或,结果存remainder余数中

    for(j=0;j

    {

    if(remainder[j]==binaryG[j])

    {

    remainder[j]=0;

    }

    else

    {

    remainder[j]=1;

    }

    }

    }

    else

    {

    // 商0

    quotient[index]=0;

    // 商0的话,remainder余数与全0按位异或,余数结果是不变的

    }

    index++;

    // 舍弃余数最高位,后边的依次前移1位

    for(j=1;j

    {

    remainder[j-1]=remainder[j];

    }

    // 将被除数的下一位数字加到余数的最低位处,这样就可以进行下一次的除法

    if((i+1)

    {

    remainder[lengthG-1]=result[i+1];

    }

    }

    // 循环结束,将商和余数的数组末尾加上结束符号

    remainder[lengthG-1]=-1;

    quotient[index]=-1;

    /*

    printf("商为:");

    printBinary(quotient);

    printf("余数为:");

    printBinary(remainder);

    */

    // 将被除数后面的0换成相应的余数,这样被除数就变成要发送的带校验码的数据

    for(i=lengthY;i

    {

    result[i]=remainder[i-lengthY];

    }

    }

    /**************************

    * 打印二进制数

    **************************/

    void printBinary(int binary[MAX_BIN_LENGHT])

    {

    int i;

    for(i=0;i

    {

    printf("%d",binary[i]);

    }

    printf("\n");

    }

    /**************************

    * 得到正序的二进制数

    **************************/

    void getOrderedBinary(int originalBinary[MAX_BIN_LENGHT],int orderedBinary[MAX_BIN_LENGHT])

    {

    /*

    *因为originalBinary数组中originalBinary[0]存放的是二进制的最低位,originalBinary[MAX_BIN_LENGHT-1]存放的是二进制的最高位,

    *将数组倒序后存放到orderedBinary中

    */

    int i;

    int j=0;

    for(i=MAX_BIN_LENGHT-1;i>=0;i--)

    {

    if(originalBinary[i]==1)

    {

    for(j=0;i>=0;i--)

    {

    orderedBinary[j]=originalBinary[i];

    j++;

    }

    }

    else if(i==0)

    {

    orderedBinary[j]=originalBinary[i];

    j++;

    }

    }

    // 设置结束标志

    orderedBinary[j]=-1;

    }

    /**************************

    * 得到二进制位数

    **************************/

    int getBinaryLength(int binary[MAX_BIN_LENGHT])

    {

    int i;

    for(i=0;i

    {

    if(binary[i]==-1)

    {

    break;

    }

    }

    return i;

    }

    /*-----------------------------测试结果------------------------------*/

    请输入Y(x)表达式:

    x^5+x^3+1

    请输入G(x)表达式:

    x^3+x^2+1

    Y(x)的二进制为:101001

    G(x)的二进制为:1101

    最终的CRC校验数据为:101001001

    展开全文
  • CRC校验的作用: 一般用于通信过程中,验证数据完整性;数据有无丢失。 校验原理&程序设计流程图 C程序验证 源码 #include <stdio.h> unsigned short RTU_CRC( unsigned char * puchMsg, unsigned ...

    CRC校验的作用:

    一般用于通信过程中,验证数据完整性;数据有无丢失。
    

    校验原理&程序设计流程图请添加图片描述

    CRC16——C程序验证

    1. 源码
    #include <stdio.h>
    unsigned short RTU_CRC( unsigned char * puchMsg, unsigned short usDataLen );
    
    int main(){
    	
    	int DateLen=11;
    	unsigned char crc[] = {0x0B,0xC1,0x08,0x21,0x92,0x64,0x10,0xD1,0x02,0x01,0x02};	
    	//check:AE B1"	 校验位,校验结果
    	
    	for (int i=0; i<DateLen; i++){
    		printf("%02X",crc[i]);
    	}
    	printf("---CRC check = %0X", RTU_CRC(crc,DateLen));
    	return 0;
    }
    // crc校验表
    static const unsigned char auchCRCHi[] = {
    0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
    0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
    0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
    0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80,
    0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1,
    0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01,
    0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
    0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
    0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
    0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01,
    0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40,
    0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80,
    0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
    0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01,
    0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
    0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80,
    0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
    0x81, 0x40};
    // -----------------------------------------------------------------------------
    // DESCRIPTION: RTU CRC 3校验的低位字节表3
    // -----------------------------------------------------------------------------
    static const unsigned char auchCRCLo[] = {
    0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5,
    0xC4, 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B,
    0xC9, 0x09, 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE,
    0xDF, 0x1F, 0xDD, 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6,
    0xD2, 0x12, 0x13, 0xD3, 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2,
    0x32, 0x36, 0xF6, 0xF7, 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F,
    0x3E, 0xFE, 0xFA, 0x3A, 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB,
    0x2B, 0x2A, 0xEA, 0xEE, 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25,
    0xE5, 0x27, 0xE7, 0xE6, 0x26, 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60,
    0x61, 0xA1, 0x63, 0xA3, 0xA2, 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C,
    0xAC, 0xAD, 0x6D, 0xAF, 0x6F, 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8,
    0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D,
    0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73,
    0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57,
    0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A,
    0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E,
    0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86,
    0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, 0x40};
    // 3校验函数3
    /*nodebug*/ unsigned short RTU_CRC( unsigned char * puchMsg, unsigned short usDataLen )
    {
    	unsigned char uchCRCHi; // high 字节 of CRC initialized
    	unsigned char uchCRCLo; // low 字节 of CRC initialized
    	unsigned uIndex; // will index into CRC lookup table
    	uchCRCHi = 0xFF;
    	uchCRCLo = 0xFF;
    	
    	while ( usDataLen-- )
    	{
    	// calculate the CRC
    		uIndex = uchCRCLo ^ (unsigned char)( *puchMsg++ );
    		uchCRCLo = uchCRCHi ^ auchCRCHi[uIndex];
    		uchCRCHi = auchCRCLo[uIndex];
    	} 
    	return ( uchCRCHi << 8 | uchCRCLo );
    }
    
    1. 执行结果

      0BC10821926410D1020102---CRC check = AEB1
      
    展开全文
  • c语言实现crc校验

    2017-12-28 17:25:18
    使用c语言模拟人工crc校验算法。使用c语言模拟人工crc校验算法
  • 用表驱动法来实现CRC8、CRC16、CRC32的数据校验,程序简洁,通俗易懂
  • CRC校验算法-C语言

    2020-11-22 16:29:54
    C语言实现各种CRC算法。编译环境:VS2010。请参考我的博客https://blog.csdn.net/u013073067/article/details/86621770 分析代码
  • CRC校验的快速算法的C语言实现CC R校验的快速算法的C语言实现颜国谷 (中原油田信息中心 4 70 ) 5 0 1摘要:c c R循环冗余校验算法,是一种在数据存储和数据通讯领域中使用十分广泛的编码算法,具有强力的检错和纠错...

    CRC校验的快速算法的C语言实现

    CC R校验的快速算法的C语言实现

    颜国谷 (中原油田信息中心 4 70 ) 5 0 1

    摘要:c c R循环冗余校验算法,是一种在数据存储和数据通讯领域中使用十分广泛的编码算法,具有强力的检错和纠错能

    力,并且开销比较小。本文从 c c本原理出发,介绍了C C速算法的原理,以c言为实现手段,实现了该算法。 R基 E快语 关键字:c c R校验快速 c c并行c c c言 R R语

    1引言 .

    在数据存储和数据通讯领域,为了保证数据的正确 .就不得不采用检错或者纠错的编码手段。在诸编码方式中,CR C是其中著名的一种,其特点是 .检错能力极强,开销小,易于用编码器及检测电路实现:从其检错能力来看,它所不能

    C C成多项式进行模 2,即: R生除

    !生

    G() x

    ! M xx ̄生:—(—x )

    G x ()

    G() z

    ( 2—2

    根据式 2 .可以得到: -1

    =++ ㈣ t (—3 2 )

    根据,根据相同的序列按位异或的结果为0 .因此 .式

    发现的错误的几率仅为 0 0 4%以下。从性能上和开销上考 2 3就可以化为: 07 -的 虑,均远远优于奇偶校验及算术和校验等方式。因而,在数

    :

    据存储和数据通讯领域,CR都被广泛运用例如,通讯协 c议 X 2的F S帧检错序列 )用的是 C C C T 5 C (采 R - ClT.AR、L A J H等压缩工具软件采用的是 CR 3 .磁盘驱动器的读写采用了 C2

    C C通用的图像存储格式 G F IF也都使用 C C为检 R 1 6 I、TF等 R作

    (—4) 2

    从中就可以看出接收端计算的结果是整除的,没有余数,这也就是 C C接收端判断数据是否正确的标准。 R在

    因此整个CR计算过程就是将要发送的信息左移k .然 C位

    后将与生成多项式进行模 2除法,等到的 k长的余数就是 C C位 R

    校验信息。

    错手段。

    2C . RC原理

    码序列在发送端 .根据已定的生成多项式 .按照一定的规则 .产生一段 k的校验码 (位即CR码 ),附在要发送的信息 c后 .构成一个新的长为 (+ )位的二进制码序列再发送给 nk

    C C R的标准是多种多样的,一般是依据生成多项式的长度

    R一 .C C 6 CR C校验是一种线性编码理论,对于要传输 n二进制分为C C 8 R 1等 .以下就是几种典型的生成多项式: 位

    C (一8:+++1

    C尺一1 x+x’ +1 C 6: +

    C RC一3工2+ 2: 3 +x+∞ + + +“+。 + + +++x+l

    接收端。在接收端则根据接收的数据部分和C C R之间是否预

    定的关系,从而判定在传输过程中是否出现传输错误。 CR C的计算是一种模 2除法,与普通的除法主要的差别的是在计算过程中减法 .使用的不借位/位的模 2运算 .等进加

    同于按位异或。

    3 C C 1快速算法原理 .R -6

    在工程运用中 .基于上面介绍的按照模 2法,计算 CR 除 C校验算法的工作量是很大的,特别是对于越长的序列 .因为没 1数据就要进行一个计算。例如一个以太网数据包的包长为

    二进制序列数据流,可以用模2多项式表示 .多项式的系

    数就是序列的值。如 1 1 1可以表示为: 0 O 1

    1 +0×+1 +0X+1 +1× × X

    最大为1 1b t .计算这样的~个数据包需要的时间和计算量 ye 58

    的花费很多,找到一种快速的C C算方法 (成并行CR算 R计也 C法 ) .对于工程应用是十分有必要的。

    可以采用增加每次C C R的输入的数据长度来简化运算需要的时间和运算量 .一般使用 1ye bt输入数据代替 1 t b的输入。

    以C C 8 R一为例 .如果要计算~个 1b的数据的C C 8 i 6t R一。

    1bt据,为: i 6数记

    假设要传输的n长度的二进制序列表示为:位

    肘(= ) 。

    使用的C C成多项式,记为: R生

    G(=&,

    M (: ()+ () M× x M。x其CM,) (就是第1 y 8t t6数据, b

    (是第 2ye数据。 ) bt的

    如果将二进制序列和生成多项式 .进行下面的计算:

    M () x x ̄ x

    =

    那么按照前面介绍的C C R原理 .计算过程 .

    ㈣+ (~1 2 )

    得到的月j就是CR校验码

    它的长度应该是比生成多项 () r C

    式少~位.要发送的数据就是: ()+R X )。

    在接收端 .对数据进行校验就是将接收到数据和已定的

    M ) x ( ' xx G()= x

    G() x

    l (一1 j。

    假定 .

    1 8科学中国人 2

    2 1年第7 00期

    1-1990-png_6_0_0_0_-1_847_1171_846_1170-1440-0-0-1440.jpg

    展开全文
  • CRC循环冗余校验算法C语言实现 CRC循环冗余校验算法C语言实现
  • static const uint32_t crc32tab[] = { 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x...
  • C语言实现CRC校验计算, 很實用
  • CRC校验C语言实现

    2022-02-18 10:44:50
    摘自:CRC校验原理及其C语言实现 地址:https://blog.csdn.net/whik1194/article/details/108837493?spm=1001.2014.3001.5502
  • CRC校验原理及其C语言实现

    千次阅读 多人点赞 2020-09-27 22:00:06
    文章目录目录前言CRC算法简介CRC参数模型CRC计算CRC校验CRC计算的C语言实现CRC计算工具总结参考资料 目录 前言 CRC算法简介 CRC计算 CRC校验 CRC计算的C语言实现 CRC计算工具 总结 前言 最近的工作中,要实现对...
  • 用51系列单片机可实现CRC32校验c语言算法,经测试通过,准确无误,代码占用量少,完全满足单片机的使用!
  • 相关原理解释csdn里面贼多,好多博主讲的贼棒,所以我就单纯就课程设计来说一说,所实现的功能分两部分就是得到CRC校验码的发送比特序列以及校验过程。所以在写的时候当成两个函数就好啦。话不多说,直接撸代码! ...
  • 非常简易的CRC32 计算对于任意大小文件进行CRC32计算 目前采用的是POLY为0xedb88320
  • CRC校验实现C语言,CRC16)

    千次阅读 2021-04-30 14:20:57
    一、CRC是什么? 循环冗余校验码(CRC),简称循环码,是一种常用的、具有检错、纠错能力的校验码,在早期的通信中运用广泛。...因此,CRC校验常常用来检测该数据包中的数据是否正确以及完整。 三、CR
  • c语言实现CRC检验算法

    2019-11-30 20:15:12
    首先打开一个文件,每读取1024字节,对这1024个字节获取crc校验值,然后写到一个新文件中,然后继续读取下一个1024个字节 然后对新的文件进行星通的crc校验,看和之前获取到的校验值是不是相同的 #include<std...
  • 按照自己的需求修改表里面的数据,即可实现不同的crc校验
  • crc32标准算法: 宽度:32 多项式:04C11DB7 初始值:0xFFFFFFFF 异或值:0xFFFFFFFF 输入输出数据反转; 与在线工具算出的crc32值一样,包含文件校验
  • CRC校验算法的分析及C语言实现.doc
  • C语言实现CRC校验计算Clcultes CRC quickly using the tble-lookup method作者:董云 YUN DONG工作单位:黄埔海关技术处工程师通讯地址:广州市经济技术开发区志诚大道海关大楼电话号码:020-82130556邮政编码:...
  • CRC校验的快速算法的C语言实现颜国谷 (中原油田信息中心 457001)摘要:C R C循环冗余校验算法,是一种在数据存储和数据通讯领域中使用十分广泛的编码算法,具有强力的检错和纠错能力,并且开销比较小。本文从CRC基本...
  • CRC8算法c语言源代码

    2015-08-11 10:17:34
    CRC8 的实现算法X2+X+1的源代码。
  • C语言 crc64校验算法

    2021-05-22 16:23:40
    1.[代码][C/C++]代码#include static const uint64_t crc64_tab[256] = {UINT64_C(0x0000000000000000), UINT64_C(0x7ad870c830358979),UINT64_C(0xf5b0e190606b12f2), UINT64_C(0x8f689158505e9b8b),UINT64_C(0xc...
  • #include <stdio.h> #include <stdlib.h> unsigned short getCRC16... unsigned short crc = 0xFFFF; if(ptr==0) { return 0; } if(len==0) { len = 1; } //if(len<=255

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,835
精华内容 1,134
关键字:

c语言实现crc校验算法