用C语言写个CRC校验
时间: 2024-04-29 10:25:33 浏览: 116
以下是一个基本的CRC校验代码示例,使用多项式x^8 + x^2 + x + 1(0x07)来进行校验。
```
#include <stdio.h>
#define POLY 0x07 // CRC多项式
unsigned char crc8(unsigned char *data, unsigned int len)
{
unsigned char crc = 0;
int i, j;
for (i = 0; i < len; i++)
{
crc ^= data[i]; // 首先将当前字节异或到CRC值上
for (j = 0; j < 8; j++)
{
if (crc & 0x80) // 如果CRC的最高位是1
{
crc = (crc << 1) ^ POLY; // 左移一位并且异或多项式
}
else
{
crc <<= 1; // 否则,直接左移一位
}
}
}
return crc;
}
int main()
{
unsigned char data[] = {0x01, 0x02, 0x03, 0x04, 0x05}; // 测试数据
unsigned char crc = crc8(data, 5); // 计算校验码
printf("CRC: 0x%02X\n", crc);
return 0;
}
```
在这个代码示例中,我们使用了一个名为crc8()的函数来计算CRC校验码。该函数接受两个参数:一个指向数据缓冲区的指针和数据的长度。函数使用一个名为crc的变量来保存CRC校验码,并使用一个名为i的循环变量来迭代遍历数据缓冲区。在每次循环中,我们将当前字节异或到crc变量上,并使用另一个名为j的循环变量来迭代处理crc的每个位。如果crc的最高位是1,我们将crc左移一位并且异或多项式。否则,我们只需将crc左移一位。最后,crc变量将包含完整的CRC校验码,我们可以将其返回并打印到控制台上。
这只是一个简单的示例,CRC校验的实现可能因不同的应用而异。因此,您可能需要根据特定应用程序的要求进行修改。
阅读全文