CRC校验码的源代码

原文网址: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校验码的例子,并采用交互式的方法,输出结果。


******************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值