CRC循环冗余校验 代码
时间: 2023-09-24 18:06:14 浏览: 90
以下是一个简单的CRC-16算法实现,可以用于计算16位的CRC校验值:
```c
#include <stdint.h>
#include <stddef.h>
#define CRC16_POLY 0x8005
uint16_t crc16(uint8_t *data, size_t len) {
uint16_t crc = 0xFFFF;
size_t i, j;
for (i = 0; i < len; i++) {
crc ^= ((uint16_t)data[i] << 8);
for (j = 0; j < 8; j++) {
if (crc & 0x8000) {
crc = (crc << 1) ^ CRC16_POLY;
} else {
crc <<= 1;
}
}
}
return crc;
}
```
使用方法如下:
```c
#include <stdio.h>
int main() {
uint8_t data[] = { 0x01, 0x02, 0x03, 0x04 };
uint16_t crc = crc16(data, sizeof(data));
printf("CRC-16: 0x%04X\n", crc);
return 0;
}
```
注意:此代码仅提供参考,实际使用时应根据具体情况进行修改和优化。
阅读全文