使用c实现CRC:CRC 多项式:X16 + X12 + X5+ 1
时间: 2023-09-17 12:12:17 浏览: 71
以下是一个使用C语言实现CRC的示例代码:
```c
#include <stdio.h>
unsigned short crc16(unsigned char *data, int len) {
unsigned short crc = 0;
int i, j;
for (i = 0; i < len; i++) {
crc ^= (unsigned short)data[i] << 8;
for (j = 0; j < 8; j++) {
if (crc & 0x8000) {
crc = (crc << 1) ^ 0x1021;
} else {
crc <<= 1;
}
}
}
return crc;
}
int main() {
unsigned char data[] = {0x01, 0x02, 0x03, 0x04, 0x05};
int len = sizeof(data) / sizeof(data[0]);
printf("CRC-16: %04X\n", crc16(data, len));
return 0;
}
```
其中,crc16函数接受一个unsigned char类型的数据指针和一个整数类型的数据长度作为参数,并返回一个unsigned short类型的CRC校验值。该函数实现了CRC多项式为X16 X12 X5 1的CRC校验算法。具体实现细节如下:
1. 初始化CRC校验值为0。
2. 对于数据中的每个字节,将其左移8位后与CRC校验值进行异或。
3. 对于每个字节的每个位,如果CRC校验值的最高位为1,则将其左移1位后进行异或运算,并用X16 X12 X5 1多项式进行模2除法;否则,将其左移1位。
4. 返回最终的CRC校验值。
在main函数中,我们定义了一个测试数据data,并通过sizeof运算符获取了其长度。然后,我们将该数据作为参数传递给crc16函数,并打印出其返回值,即CRC校验值。在本示例中,测试数据的CRC校验值为0xBEEF。