CRC 循环冗余校验码 (VC编程)

/*
CRC 循环冗余校验码 (VC编程)
CRC(Cyclic Redundancy Check)循环冗余校验码


  CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码共长n个bit,信息码长k个bit,就称为(n,k)码。 它的编码规则是:
  1、首先将原信息码(kbit)左移r位(k+r=n)
  2、运用一个生成多项式g(x)(也可看成二进制数)用模2除上面的式子,得到的余数就是校验码。

  非常简单,要说明的:模2除就是在除的过程中用模2加,模2加实际上就是我们熟悉的异或运算,就是加法不考虑进位,公式是:
  0+0=1+1=0,1+0=0+1=1
即‘异’则真,‘非异’则假。
  由此得到定理:a+b+b=a 也就是‘模2减’和‘模2加’直值表完全相同。

  有了加减法就可以用来定义模2除法,于是就可以用生成多项式g(x)生成CRC校验码。

例如: g(x)=x4+x3+x2+1,(7,3)码,信息码110产生的CRC码就是:
            101
11101 ¦ 110,0000
        111 01
          1 0100
          1 1101
            1001
余数是1001,所以CRC码是110,1001

标准的CRC码是,CRC-CCITT和CRC-16,它们的生成多项式是:
  CRC-CCITT=x16+x12+x5+1
  CRC-16=x16+x15+x2+1

引用自:http://www.programfan.com/blog/article.asp?id=11042



--------------------------------------------------------------------------------


这个问题第2个回答:
给你一个写好的  嘿嘿
*/
unsigned  short CReadDateDlg::CRC16(unsigned char *data, unsigned char length)
{
        unsigned  short  reg_crc;                    
    unsigned  short  s_crcchk;                    
    s_crcchk  =  0;              
    reg_crc  =  0xffff;
    while(length--)
    {
        reg_crc  ^=  *data++;
        for(s_crcchk  =  0;  s_crcchk  <  8;  s_crcchk  ++)
        {
            if(reg_crc  &  0x01)
            {
                reg_crc  =  (reg_crc  >>  1)^0xa001;
            }
            else
            {
                reg_crc  =  reg_crc  >>  1;
            }
        }
    }
    return  reg_crc;
}

/*
--------------------------------------------------------------------------------


这个问题第3个回答:
引用的时候只需在要调用的程序中添加如下代码 */
        unsigned  int  uiCRC;
        BYTE bCommand[17];//校验的数组
        BYTE  str[2] ;//存放校验值
uiCRC  =  CRC16(bCommand,17);    //CRC16校验
str[0]  =  uiCRC/0x100; //其中一个检验值
str[1]  =  uiCRC%0x100; //另一个校验值

/*

--------------------------------------------------------------------------------


这个问题第4个回答:
BYTE bCommand[17];//校验的数组
数组大小你可以随便修改
 */
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值