本文将使用 C 语言完成 CRC32 算法的实现;

CRC32(循环冗余校验)是一种常用的校验算法,主要用于检测数据传输或存储过程中的错误。它通过计算输入数据生成一个 32 位哈希值(通常表示为 8 位十六进制数)。

C语言实现CRC32算法

这个例子对字符串"hello world"进行 CRC32 运算:

#include <inttypes.h>
#include <stdio.h>

uint32_t crc32(const char* s){

    uint32_t crc = 0xffffffff;
    size_t i = 0;
    while (s[i] != '\0')
    {
        uint8_t byte = s[i];
        crc = crc ^ byte;
        for (uint8_t j = 8; j > 0; --j)
        {
            crc = (crc >> 1) ^ (0xEDB88320 & (-(crc & 1)));
        }

        i++;
    }
    return crc ^ 0xffffffff;
}

int main(){
    printf("%" PRIu32 "\n", crc32("hello world"));//222957957
    printf("%" PRIx32 "\n", crc32("hello world"));//d4a1185
    return 0;
}

程序输出:

222957957
d4a1185