用C语言编写16位CRC校验程序代码
时间: 2024-05-09 14:19:40 浏览: 98
以下是一个用C语言编写的16位CRC校验程序代码:
```c
#include <stdio.h>
#include <stdint.h>
#define POLY 0x1021 // CRC-16-CCITT多项式
uint16_t crc16_ccitt(uint8_t *data, uint16_t len)
{
uint16_t crc = 0xFFFF; // 初始值为0xFFFF
uint16_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) ^ POLY;
} else {
crc <<= 1;
}
}
}
return crc;
}
int main()
{
uint8_t data[] = {0x01, 0x02, 0x03, 0x04}; // 测试数据
uint16_t len = sizeof(data) / sizeof(data[0]); // 数据长度
uint16_t crc = crc16_ccitt(data, len); // 计算CRC校验值
printf("CRC-16-CCITT = 0x%04X\n", crc);
return 0;
}
```
在这个程序中,我们使用了一个预定义的CRC-16-CCITT多项式(0x1021)。对于每个输入字节,我们使用异或运算符将其与crc寄存器的高位进行异或操作,然后通过一个循环来处理每个位。如果crc寄存器的高位是1,我们使用异或运算符将其与多项式进行异或操作,然后将crc寄存器的值左移一位。否则,我们只将crc寄存器的值左移一位。最后,crc寄存器的值就是CRC校验值。
阅读全文