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
- CRC校验码的源代码
- CRC校验码的理解+CRC校验码算法代码
- CRC校验码的理解+CRC校验码算法代码
- CRC校验码的VHDL代码
- CRC校验码的生成编码
- CRC校验码的校验方法
- CRC-16校验码的使用
- CRC校验码
- CRC校验码
- CRC校验码
- CRC校验码
- CRC校验码
- CRC校验码
- 循环冗余校验码(CRC)的基本原理
- CRC循环冗余校验码的生成
- 基于FPGA的CRC校验码生成器
- CRC冗余校验码的介绍和实现
- 基于FPGA的CRC校验码生成器
- iOS 7毛玻璃模糊效果
- vc++加载透明png图片的两种方法-GDI+和CImage
- 对《JCP》"3.4.2"的理解
- unity中 继承,多态,override 的问题1
- 夏敏捷主编的书(2008-2014,八本)
- CRC校验码的源代码
- MFC使用自定义资源加载PNG
- 等待
- 舞钢大业投资担保王恒:央行再度定向降准力挺“三农”,小微覆盖大部分的城市商业银行,非农业企业和非县农村合作银行
- QString与中文问题
- 设计模式六大原则(2):里氏替换原则
- oracle 密码过期的解决方法
- TextView中大量文字对齐的方法
- 开源CMS的忠实粉丝——We7