c语言写一个crc校验 宽度32 多项式0x04C11DB7
时间: 2023-12-25 12:03:28 浏览: 171
好的,我可以回答这个问题。以下是C语言代码示例:
```c
#include <stdio.h>
#define POLY 0x04C11DB7
#define WIDTH 32
#define TOPBIT (1 << (WIDTH - 1))
unsigned int crc32(unsigned char* message, int length) {
int i, j;
unsigned int byte, crc, mask;
crc = 0xFFFFFFFF;
for (i = 0; i < length; i++) {
byte = message[i];
crc ^= (byte << (WIDTH - 8));
for (j = 0; j < 8; j++) {
mask = -(crc & 1);
crc = (crc >> 1) ^ (POLY & mask);
}
}
return ~crc;
}
int main() {
unsigned char data[] = "Hello, world!";
unsigned int crc = crc32(data, sizeof(data));
printf("CRC32 value is 0x%X\n", crc);
return 0;
}
```
该函数接收一个消息和其长度作为参数,计算出相应的CRC32值,并返回该值。多项式和位宽度是在预处理阶段定义的。这个实现使用“反射长度”策略,因此CRC32的结果是最终值反转后的结果。
阅读全文