gpt4 book ai didi

c - 快速CRC算法?

转载 作者:可可西里 更新时间:2023-11-01 15:37:37 25 4
gpt4 key购买 nike

我想用 ASCII 字符串创建一个 32 位数字。 CRC32 算法正是我要找的,但我不能使用它,因为它需要的表太大(它适用于资源非常稀缺的嵌入式系统)。

那么:对于快速而精简的 CRC 算法有什么建议吗?与原始 CRC32 相比,何时更可能发生冲突并不重要。

最佳答案

CRC 实现使用表格来提高速度。它们不是必需的。

这是使用 Castagnoli 多项式(与 Intel crc32 指令使用的相同)或以太网多项式(与 zip、gzip 等中使用的相同)的短 CRC32。

#include <stddef.h>
#include <stdint.h>

/* CRC-32C (iSCSI) polynomial in reversed bit order. */
#define POLY 0x82f63b78

/* CRC-32 (Ethernet, ZIP, etc.) polynomial in reversed bit order. */
/* #define POLY 0xedb88320 */

uint32_t crc32c(uint32_t crc, const unsigned char *buf, size_t len)
{
int k;

crc = ~crc;
while (len--) {
crc ^= *buf++;
for (k = 0; k < 8; k++)
crc = crc & 1 ? (crc >> 1) ^ POLY : crc >> 1;
}
return ~crc;
}

crc 的初始值应该为零。可以使用数据 block 连续调用例程来更新 CRC。您可以展开内部循环以提高速度,尽管您的编译器可能会为您这样做。

关于c - 快速CRC算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27939882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com