C语言CRC校验代码
时间: 2024-08-14 07:01:45 浏览: 54
32位CRC校验c语言代码
CRC(Cyclic Redundancy Check,循环冗余校验)是一种常用的数据完整性检查算法,在C语言中可以使用位操作或者库函数来实现。下面是一个简单的CRC16-CITT算法的C语言示例:
```c
#include <stdio.h>
#include <stdlib.h>
// CRC16-CITT polynomial (0x1021)
#define CRC_POLY 0x1021
// CRC initial values
#define CRC_INIT 0xFFFF
// CRC bit-by-bit XOR function
uint16_t crc_bit_by_bit(uint16_t data, uint16_t crc) {
for (; data != 0; data >>= 1) { // shift data and mask with CRC polynomial
if (data & 0x0001) {
crc ^= CRC_POLY;
}
crc <<= 1; // left shift CRC by one bit
if (crc & 0x8000) { // if carry out
crc &= ~CRC_POLY; // apply polynomial again to clear the carry
}
}
return crc;
}
int main() {
uint8_t message[] = "Hello, CRC!";
uint16_t crc = CRC_INIT;
for (size_t i = 0; i < sizeof(message); ++i) {
crc = crc_bit_by_bit(message[i], crc);
}
printf("CRC-16 of 'Hello, CRC!': %04X\n", crc);
return 0;
}
```
在这个例子中,我们首先定义了CRC相关的常量,然后通过`crc_bit_by_bit`函数逐位计算数据与CRC值的异或结果。最后在`main`函数里对给定的消息进行CRC校验。
阅读全文