C语言实现CRC32校验算法详解及代码示例
以下是一个基本的C语言实现CRC32校验的程序:
#include <stdio.h>
#include <stdint.h>
#define CRC32_POLYNOMIAL 0xEDB88320
uint32_t crc32(uint8_t *data, uint32_t length)
{
uint32_t crc = 0xFFFFFFFF;
for (uint32_t i = 0; i < length; i++) {
crc ^= data[i];
for (uint32_t j = 0; j < 8; j++) {
if ((crc & 1) == 1) {
crc = (crc >> 1) ^ CRC32_POLYNOMIAL;
} else {
crc >>= 1;
}
}
}
return ~crc;
}
int main()
{
uint8_t data[] = '123456789';
uint32_t crc = crc32(data, sizeof(data) - 1);
printf("CRC32: 0x%08X\n", crc);
return 0;
}
该程序实现了一个简单的CRC32校验,它使用了一个预定义的多项式(polynomial),即0xEDB88320。程序首先将CRC初始化为0xFFFFFFFF,接着将每个字节与CRC进行异或操作。然后进行8次循环,如果CRC的最低位为1,则将CRC右移一位并与多项式异或;否则只需将CRC右移一位。最后取反CRC并返回它的值。
在上面的示例中,我们对字符串'123456789'进行了CRC32校验,输出结果为0xCBFC081C。
原文地址: https://www.cveoy.top/t/topic/ovPy 著作权归作者所有。请勿转载和采集!