精华内容
下载资源
问答
  • 2021-05-26 17:21:23
    #include <stdio.h>
    #include <stdlib.h>
    
    
    unsigned short getCRC16(unsigned char *ptr,unsigned char len)
    {
    		unsigned char i;
    		unsigned short crc = 0xFFFF;
    		
    		if(ptr==0)
    		{
    				return 0;
    		}
    		if(len==0)
    		{
    			len = 1;
    		}
    		//if(len<=255)
    		{
    				while(len--)
    				{
    						crc ^= *ptr;
    						for(i=0; i<8; i++)
    						{
    							if(crc&1)
    							{
    								crc >>= 1;
    								crc ^= 0xA001;
    							}
    							else
    								crc >>= 1;
    						}
    						ptr++;
    				}
    		}
    		return(crc);
    } 
    
    
    
    
    int main(void)
    {
      unsigned short rc = 0;
      unsigned char num[6] ={0x02,0x06,0x01,0x07,0x00,0x01};
      
      rc = getCRC16(num,sizeof(num));
    	
      printf("rc = %04X\r\n",rc);	
      
      printf("rc_low = %02X\r\n",*((unsigned char *)&rc));
      printf("rc_high = %02X\r\n",*(((unsigned char *)&rc)+1));
    	
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    更多相关内容
  • 用表驱动法来实现CRC8CRC16、CRC32的数据校验,程序简洁,通俗易懂
  • CRC校验算法-C语言

    2020-11-22 16:29:54
    C语言实现各种CRC算法。编译环境:VS2010。请参考我的博客https://blog.csdn.net/u013073067/article/details/86621770 分析代码
  • crc8校验算法(c语言)

    热门讨论 2010-04-29 11:46:51
    crc8校验算法的源代码,用C语言编写的
  • 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
      
    展开全文
  • CRC16校验C语言程序源码(附完整的可执行的C语言代码).pdf
  • 信息表片段顿时只觉眼前一片黑压压的18位阿拉伯数字排山倒海之势正要压倒右手掌心的鼠标红点,说时迟那是快,立刻掏出多年陪伴的女朋友,哦不,是双手,一串清澈的ABC从指尖划过,神奇的“身份证号算法”在浏览器...
    6b559c378505962c7ac352d98a1ecf1a.gif

    本文是来自公众号粉丝1031(微信号:Vilko-Ra)的投稿。

    3b950a2f6632530d93b6a70aeaf851d4.gif 今天小编接到一个重要任务,检验统计的人员信息里身份证号码的有效性,打开统计表一看,几千行人员信息。

    1c040c484a9663d0fed7377567f33c9e.png 

    信息表片段

    顿时只觉眼前一片黑压压的18位阿拉伯数字排山倒海之势正要压倒右手掌心的鼠标红点,说时迟那是快,立刻掏出多年陪伴的女朋友,哦不,是双手,一串清澈的ABC从指尖划过,神奇的“身份证号算法”在浏览器搜索页闪亮着光芒。

    4ae308c0712e5e98f31bc13d7c1bfc97.png

    前17位数分别【乘以不同的系数】,【结果相加】,【除以11】取余数,【查校验码】。你一定是:一脸懵逼,忍不住提高嗓门,胸肌一震动,一颗“what?”掷地有声。我露出咬过无数次筷子的一字大白牙,弯腰45°,双手举过头顶,奉上准备已久的算法图表。

    f6279618933cdcae254e8328320a2278.png

     

    可见以上身份证号码第18位“X”与校验码“9”不符,校验错误。

    相信聪明的你已经看清了小编的明亮眼睛,拿出了蠢蠢欲动的神马计算器,“今天星期四,我要学写字,拿起神马笔,一二三个四……”一边大声喊出口诀,一边狂操信息表。No No No……魅力无穷小小编怎么舍得你受这么大的苦呢,一把“黑十字”嗖嗖飞过来,且看动图:

    40f828d04757569cbe31c6b2903d9152.gif

    具体公式如下:

    =IF(LEN(C2)=18,IF(RIGHT(C2,1)=MID("10X98765432",1+MOD(SUMPRODUCT(VALUE(MID(C2,ROW($1:$17),1)),系数表!$B$2:$B$18),11),1),"合法","不合法"),"长度错误")

    对本文知识点有任何疑问请联系本文作者微信号:Vilko-Ray。作者说了:必知无不言言无不尽,一起成长。(2019年9月14日23点54分完稿)

    最后,再次感谢Vilko-Ray的投稿,向大家无私分享自己的经验。

    欢迎大家投稿

    函数|VBA|图表|数据分析类文章均可

    你来编辑,我来排版。

    1f1d510ed3cb16f6d975011d8001b8ce.gif
    展开全文
  • CRC8算法c语言源代码

    2015-08-11 10:17:34
    CRC8 的实现算法X2+X+1的源代码。
  • 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语言实现
  • 用51系列单片机可实现的CRC32校验c语言算法,经测试通过,准确无误,代码占用量少,完全满足单片机的使用!
  • static const uint32_t crc32tab[] = { 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x...
  • crc16校验函数c语言

    2014-03-19 09:37:37
    适用于标准MODBUS通信协议校验,经验证crc16校验吗无误
  • C语言实现CRC16校校验

    2018-05-23 13:20:48
    C语言实现标准CRC16校验 ,文件包含crc.h 和crc.c,有问题可以 私聊我 q-175-543-7233
  • CRC-8/MAXIM校验算法(C语言实现)

    千次阅读 2020-10-19 00:24:22
      CRC,全称“Cyclic ...下面介绍一些常用的生成CRC校验码的C语言实现方式。 CRC-8/MAXIM (笑) 参数模型 NAME x 8+x5+x4+1 宽度 WIDTH 8 多项式 POLY 0x31 初始值 INIT 0x00 结果亦或值 XOROU 0x
  • CRC8校验算法总结

    万次阅读 2019-09-02 17:37:36
    最近做项目时,一直在用crc8算法校验,但是编程平台多样,所以总结一下。使用的多项式是:X8 + X2 + X + 1 1 C语言 /************************************************************* * 函数名称: gh_crc8 * * ...
  • CRC校验类型:CRC8/MAXIM多项式:X8+X5+X4+1Poly:0011 0001 0x31高位放到后面就变成 1000 1100 0x8cC现实代码:unsigned char crc8_chk_value(unsigned char *message, unsigned char len){uint8 crc;uint8 i;crc =...
  • CRC32校验算法C语言版(查表法)

    万次阅读 2016-05-16 17:20:27
    最近用到CRC校验算法,就找了些资料,学习了一下,网上关于CRC32的资料也多,但感觉不是很完整,或者太高深。 CRC算法查表法很常见,但表是怎么来的,有些资料说得不很清楚。 我来说一下我的看法: 1.CRC校验变化太...
  • CRC校验原理及其C语言实现

    千次阅读 多人点赞 2020-09-27 22:00:06
    文章目录目录前言CRC算法简介CRC参数模型CRC计算CRC校验CRC计算的C语言实现CRC计算工具总结参考资料 目录 前言 CRC算法简介 CRC计算 CRC校验 CRC计算的C语言实现 CRC计算工具 总结 前言 最近的工作中,要实现对...
  • modbus RTU CRC16校验函数 C语言
  • 按照自己的需求修改表里面的数据,即可实现不同的crc校验
  • CRC16校验原理附C语言源码,相信描述CRC16算法原理,附带的C语言代码,可以直接使用
  • CRC校验C语言实现

    2022-02-18 10:44:50
    摘自:CRC校验原理及其C语言实现 地址:https://blog.csdn.net/whik1194/article/details/108837493?spm=1001.2014.3001.5502
  • Modbus通信协议中CRC校验的快速C语言算法
  • 通用单片机CRC8校验程序,用C编写,为标准的多项式=0x31 数据反转:LSB first算法。和PC端典型的多项式=0x31 数据反转:LSB first算法CRC8校验结果算法一致,通用性强,代码简洁。和上位机交换信息时候,有现成的算...
  • CRC校验原理及简单CRC-8校验函数(7个输入字节以内)可参考: CRC校验原理及CRC-8校验函数设计 。 这里的函数是实现输入范围扩展,支持任意长度的输入字节的CRC-8校验。 设计原理 设计原理仍然基于无符号64位整型为...
  • C语言MD5算法,CRC16校验算法C语言MD5算法,CRC16校验算法MD5算法CRC16校验算法 C语言MD5算法,CRC16校验算法 MD5算法 /* 函数使用说明: 先调用MD5Init初始化一个MD5_CTX类型结构体,再使用MD5Update计算MD5码,...
  • } //CRC4校验演示 void main() { char inbuf[100], fcs[100]; //输入缓冲区 FCS缓冲区 int i=0,j=0; printf("\n输入M:"); scanf("%s",inbuf); while(inbuf[0]!='0' || inbuf[1]!='\0'){ printf("FCS:"); ...

空空如也

空空如也

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

crc8校验算法c语言