crc校验码计算c代码
时间: 2023-09-05 09:14:25 浏览: 50
以下是一个C语言实现的CRC校验码计算程序:
```c
#include <stdio.h>
#include <stdlib.h>
#define CRC_POLYNOMIAL 0xEDB88320
unsigned long crc_table[256];
void init_crc_table() {
unsigned long crc;
int i, j;
for (i = 0; i < 256; i++) {
crc = i;
for (j = 0; j < 8; j++) {
if (crc & 1) {
crc = (crc >> 1) ^ CRC_POLYNOMIAL;
} else {
crc = crc >> 1;
}
}
crc_table[i] = crc;
}
}
unsigned long crc32(unsigned char *data, int len) {
unsigned long crc = 0xFFFFFFFF;
int i;
for (i = 0; i < len; i++) {
crc = (crc >> 8) ^ crc_table[(crc ^ data[i]) & 0xFF];
}
return crc ^ 0xFFFFFFFF;
}
int main() {
init_crc_table();
unsigned char data[] = "Hello, world!";
int len = sizeof(data) - 1;
unsigned long crc = crc32(data, len);
printf("CRC32: %08lx\n", crc);
return 0;
}
```
该程序实现了一个32位CRC校验码计算器,使用了预先计算好的CRC表来加快计算速度。在`init_crc_table`函数中,预先计算了256个字节的CRC校验码,并存储到`crc_table`数组中;在`crc32`函数中,对输入的数据进行遍历,每次取出一个字节并与CRC值进行异或和查表操作,最后返回计算得到的CRC值。在主函数中,我们使用了一个字符串作为输入数据,并输出计算得到的CRC值。