crc校验c语言简单实现
时间: 2023-07-30 17:07:49 浏览: 56
当然可以!下面是一个简单实现的示例代码:
```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, 0x05};
int length = sizeof(data) / sizeof(data[0]);
unsigned short result = crc16(data, length);
printf("CRC: 0x%04X\n", result);
return 0;
}
```
这段代码实现了一个简单的 CRC-16 校验。函数 `crc16` 接受一个字节数组和数组长度作为输入,并返回计算得到的 CRC-16 校验值。在 `main` 函数中,我们定义了一个示例数据数组 `data`,然后调用 `crc16` 函数计算 CRC-16 校验值,并打印结果。
注意,在这个示例中使用的是 CRC-16-Modbus 算法,具体的多项式为 `0xA001`。你可以根据需要更改这个多项式来适应不同的 CRC-16 校验需求。
希望这可以帮到你!如果还有其他问题,请随时提问。