crc16校验算法c语言
时间: 2023-08-31 10:12:22 浏览: 93
以下是crc16校验算法的C语言代码:
```c
#include <stdio.h>
unsigned short crc16(unsigned char *data, int length) {
unsigned short crc = 0xFFFF;
int i, j;
for (i = 0; i < length; i++) {
crc ^= (unsigned short)data[i];
for (j = 0; j < 8; j++) {
if (crc & 0x0001) {
crc >>= 1;
crc ^= 0xA001;
} else {
crc >>= 1;
}
}
}
return crc;
}
int main() {
unsigned char data[] = {0x01, 0x02, 0x03, 0x04};
unsigned short result = crc16(data, 4);
printf("CRC16: %04X\n", result);
return 0;
}
```
其中,crc16函数接收两个参数:待校验数据的首地址和数据长度。在函数内部,首先初始化crc为0xFFFF,然后对每个数据字节进行异或操作,接着进行8次循环,每次判断最低位是否为1,如果是,则将crc右移一位并与0xA001进行异或操作,否则只右移一位。最后返回计算出的crc值。
在主函数中,我们定义了一个长度为4的unsigned char数组,并将其作为参数调用了crc16函数,最终输出计算出的CRC16值。
阅读全文