CRC32算法的C语言实现 
时间: 2023-03-20 21:01:50 浏览: 75
下面是CRC32算法的C语言实现:
```c
#include <stdio.h>
#include <stdint.h>
uint32_t crc32(const void *data, size_t size) {
uint32_t crc = 0xFFFFFFFF;
const uint8_t *bytes = (const uint8_t*)data;
for (size_t i = 0; i < size; i++) {
crc ^= bytes[i];
for (int j = 0; j < 8; j++) {
uint32_t mask = -(crc & 1);
crc = (crc >> 1) ^ (0xEDB88320 & mask);
}
}
return ~crc;
}
int main() {
const char *test_data = "Hello, World!";
uint32_t crc = crc32(test_data, strlen(test_data));
printf("CRC32 of \"%s\" is 0x%08X\n", test_data, crc);
return 0;
}
```
这段代码定义了一个`crc32`函数,它接受一个指向数据的指针和数据大小,返回一个32位无符号整数作为CRC32校验码。在函数内部,使用一个变量`crc`来存储CRC32值的当前状态,初始值为0xFFFFFFFF。然后,将数据的每个字节都与`crc`进行异或操作,然后进行一个循环,这个循环迭代8次,每次都会执行以下操作:
1. 判断`crc`的最低位是否为1,如果是,将一个32位常数0xEDB88320与一个值为1的掩码进行异或操作,否则只向右移动一位。
2. 将得到的结果作为新的`crc`值。
最后,将`crc`值取反并返回。在`main`函数中,我们使用`test_data`字符串来测试`crc32`函数,并打印CRC32校验码的十六进制表示。
相关推荐













