#include <stdint.h>
// CRC-32 (Ethernet) polynomial: 0x4C11DB7
#define CRC32_POLYNOMIAL 0x04C11DB7
// Function to calculate the CRC-32 value
uint32_t crc32_calculate(const uint8_t *data, size_t length, uint32_t crc) {
while (length--) {
crc ^= (*data++ << 24);
for (int i = 0; i < 8; i++) {
if (crc & 0x80000000) {
crc = (crc << 1) ^ CRC32_POLYNOMIAL;
} else {
crc <<= 1;
}
}
}
return crc;
}
// Example usage:
uint8_t my_data[] = {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF};
uint32_t crc_value = crc32_calculate(my_data, sizeof(my_data), 0xFFFFFFFF);
|