Mar*_*ler 25
CRC实现使用表来提高速度.它们不是必需的.
这是一个简短的CRC32,使用Castagnoli多项式(与Intel crc32指令使用的相同)或以太网多项式(与zip,gzip等中使用的相同).
#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;
}
Run Code Online (Sandbox Code Playgroud)
初始crc值应为零.可以使用数据块连续调用该例程以更新CRC.您可以展开内部循环以获得速度,尽管您的编译器可能会为您执行此操作.
| 归档时间: |
|
| 查看次数: |
19331 次 |
| 最近记录: |