c语言实现crc16 ccitt
时间: 2023-07-13 21:12:52 浏览: 114
下面是C语言实现CRC16 CCITT的代码:
```c
#include <stdio.h>
#include <stdint.h>
#define POLY 0x1021
uint16_t crc16_ccitt(const uint8_t *data, uint32_t length) {
uint16_t crc = 0x0000;
for (uint32_t i = 0; i < length; i++) {
crc ^= (uint16_t)data[i] << 8;
for (uint8_t j = 0; j < 8; j++) {
if (crc & 0x8000) {
crc = (crc << 1) ^ POLY;
} else {
crc <<= 1;
}
}
}
return crc;
}
int main() {
uint8_t data[] = {0x01, 0x02, 0x03, 0x04, 0x05};
uint16_t crc = crc16_ccitt(data, sizeof(data));
printf("CRC16 CCITT: 0x%04X\n", crc);
return 0;
}
```
在这个代码中,我们首先定义了一个`POLY`常量,它是CRC16 CCITT算法中的多项式。然后,我们实现了一个`crc16_ccitt`函数,它接受一个指向数据的指针和数据的长度作为参数,并返回CRC16 CCITT值。
在函数中,我们首先初始化`crc`变量为0x0000。然后,我们遍历数据并将每个字节与`crc`进行异或运算。接下来,我们对`crc`进行8次迭代,每次迭代检查最高位是否为1。如果最高位为1,我们将`crc`左移1位并与多项式进行异或运算。否则,我们只将`crc`左移1位。
最后,我们在主函数中调用`crc16_ccitt`函数并打印结果。
阅读全文