C语言 CRC校验代码
时间: 2024-11-17 13:14:21 浏览: 40
CRC(Cyclic Redundancy Check,循环冗余校验)是一种常见的数据校验技术,在C语言中通常用于检测数据传输过程中是否有错误。下面是使用C语言编写的一个简单的CRC16计算函数的例子:
```c
#include <math.h>
// 定义CRC16的poly和initial值
#define POLY 0x8408
#define INIT 0xFFFF
uint16_t crc16(uint16_t data, const uint8_t *buf, size_t len) {
uint16_t crc = INIT;
for (size_t i = 0; i < len; i++) {
crc ^= buf[i];
for (int j = 0; j < 8; j++) {
if (crc & 0x0001) {
crc >>= 1;
crc ^= POLY;
} else {
crc >>= 1;
}
}
}
return crc;
}
// 使用示例
const uint8_t data[] = {0x01, 0x02, 0x03, 0x04};
uint16_t computed_crc = crc16(0, data, sizeof(data));
```
在这个例子中,`crc16()`函数接受待校验的数据(data)以及数据的字节指针(buf)和长度(len)。它通过位操作逐步更新CRC值,直到遍历完整个数据包。
阅读全文