crc校验c代码示例
时间: 2024-04-21 17:21:01 浏览: 9
CRC(循环冗余校验)是一种用于检测数据传输或存储时可能出现的错误的技术。下面是一个使用C语言实现的简单CRC-32校验的示例:
```c
#include <stdio.h>
unsigned int crc32_table[256];
void generate_crc32_table() {
unsigned int c;
for (int i = 0; i < 256; i++) {
c = i;
for (int j = 0; j < 8; j++) {
if (c & 1) {
c = 0xEDB88320L ^ (c >> 1);
} else {
c = c >> 1;
}
}
crc32_table[i] = c;
}
}
unsigned int crc32(unsigned char *buf, int len) {
unsigned int crc = 0xFFFFFFFFL;
for (int i = 0; i < len; i++) {
crc = crc32_table[(crc ^ buf[i]) & 0xFF] ^ (crc >> 8);
}
return crc ^ 0xFFFFFFFFL;
}
int main() {
generate_crc32_table();
unsigned char data[] = "Hello, world!";
unsigned int crc = crc32(data, sizeof(data) - 1);
printf("CRC-32: 0x%08X
", crc);
return 0;
}
```
这个示例首先生成一个CRC-32查找表,然后使用这个表来计算输入数据的CRC-32值。在这个例子中,我们计算字符串"Hello, world!"的CRC-32值。