软件配置示例(使用C语言)
c
#include <stdint.h>
// CRC-32参数
#define POLYNOMIAL 0x04C11DB7
#define INITIAL_VALUE 0xFFFFFFFF
#define XOR_OUT 0xFFFFFFFF
// 函数声明
uint32_t crc32(const uint8_t *data, size_t length);
int main() {
// 测试数据
uint8_t testData[] = "123456789";
uint32_t crc = crc32(testData, sizeof(testData) - 1);
// 打印CRC结果
printf("CRC32: %08X\n", crc);
return 0;
}
uint32_t crc32(const uint8_t *data, size_t length) {
uint32_t crc = INITIAL_VALUE;
for (size_t i = 0; i < length; i++) {
uint8_t byte = data[i];
if (REFLECT_INPUT) {
byte = reflect(byte, 8);
}
crc ^= (uint32_t)byte << 24;
for (int j = 0; j < 8; j++) {
if (crc & 0x80000000) {
crc = (crc << 1) ^ POLYNOMIAL;
} else {
crc <<= 1;
}
}
}
if (REFLECT_OUTPUT) {
crc = reflect(crc, 32);
}
return crc ^ XOR_OUT;
}
uint32_t reflect(uint32_t data, int bits) {
uint32_t reflection = 0x00000000;
for (int bit = 0; bit < bits; bit++) {
if (data & 0x01) {
reflection |= (1 << ((bits - 1) - bit));
}
data = (data >> 1);
}
return reflection;
}
|