CRC校验码的源代码

来源:互联网 发布:单片机温湿度采集系统 编辑:程序博客网 时间:2024/04/30 08:15

原文网址:http://blog.163.com/fsd999999@126/blog/static/37737825201051033543633/

很多网络协议都用到CRC校验码,当自己编写网络协议的时候,也需要编写相应的CRC代码,来进行校验,网上有很多类似的代码,但是有些很麻烦,也不一定高效,我现在提供一个很高效,也很容易理解的CRC校验方法,希望能够对大家有所帮助。



int calcByte(int crc, char b)//这个函数是用来进行位运算的,主要为下面的计算CRC来服务
{
     int i;
 crc = crc ^ (int)b << 8;


    for ( i = 0; i < 8; i++)
    {
        if ((crc & 0x8000) == 0x8000)
            crc = crc << 1 ^ 0x1021;
        else
            crc = crc << 1;
    }
 
    return crc & 0xffff;
}


//count crc-16, length in byte


//这个函数是计算16位CRC码的函数,只要给出要校验的数组,以及数组长度,就可以返回16位CRC校验码
int CRC16(char *pBuffer, int length)


{
 int wCRC16=0;
 int i;
 if (( pBuffer==0 )||( length==0 ))
 {
  return 0;
 }
 for ( i = 0; i < length; i++)
 {
  wCRC16 = calcByte(wCRC16, pBuffer[i]);
 }
 return wCRC16;
}


//下面这个函数是计算32位CRC码的函数,传入参数是数组,以及校验的数据数量,返回32位的CRC校验码


long CRC32(char*  pBuffer, long  length)
{
 long dwCRC32=0;
 if ((NULL == pBuffer)||(0 == length))
 {
  return 0;
 }
 for (int i = 0; i < length; i++)
 {
  dwCRC32 -= *pBuffer++;
 }
 return dwCRC32;
}


 


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


crc校验码的使用是这样的:当要发送数据的时候,把要发送的进行CRC校验,然后把这些数据连同CRC校验码一起发送给接收方,当接收方收到数据的时候,把收到的数据重新计算一下CRC校验码,然后跟收到的CRC校验码进行比较,如果相同,就证明接收正确,如果不一样,那么就要求发送方重新发送一下这个数据。经验表明,计算16位的CRC校验码的那个代码很受欢迎。我在下一篇日志中,将用C语言写一个计算CRC校验码的例子,并采用交互式的方法,输出结果。


******************************/
0 0
原创粉丝点击