Crc

🧩 Syntax:
#include <iostream>

// Function to perform CRC decoding
int* decodeCRC(int receivedData[], int receivedDataSize, int generator[], int generatorSize) {
    int dataSize = receivedDataSize - generatorSize + 1;
    int* remainder = new int[generatorSize - 1]();
    
    for (int i = 0; i < dataSize; i++) {
        if (remainder[0] == 1) {
            for (int j = 1; j < generatorSize; j++) {
                remainder[j - 1] = (remainder[j - 1] + generator[j]) % 2;
            }
        }
        for (int j = 0; j < generatorSize - 1; j++) {
            remainder[j] = (remainder[j] + receivedData[i + j]) % 2;
        }
    }

    // Check if remainder is all zeros
    for (int i = 0; i < generatorSize - 1; i++) {
        if (remainder[i] != 0) {
            std::cout << "Error detected in received data!" << std::endl;
            delete[] remainder;
            return nullptr;
        }
    }

    // Remove the CRC remainder from received data
    int* decodedData = new int[dataSize];
    for (int i = 0; i < dataSize; i++) {
        decodedData[i] = receivedData[i];
    }
    delete[] remainder;
    return decodedData;
}

int main() {
    // Get received data from user
    int receivedData[100]; // Assuming a maximum of 100 elements
    int dataInput, receivedDataSize = 0;
    std::cout << "Enter received data (0 or 1, separated by spaces, end with -1): ";
    while (std::cin >> dataInput && dataInput != -1) {
        receivedData[receivedDataSize++] = dataInput;
    }

    // Get generator polynomial from user
    int generator[100]; // Assuming a maximum of 100 elements
    int generatorSize = 0;
    std::cout << "Enter generator polynomial coefficients (0 or 1, separated by spaces, end with -1): ";
    while (std::cin >> dataInput && dataInput != -1) {
        generator[generatorSize++] = dataInput;
    }

    // Decode the received data
    int* decodedData = decodeCRC(receivedData, receivedDataSize, generator, generatorSize);

    // Output the decoded data
    if (decodedData != nullptr) {
        std::cout << "Decoded Data: ";
        for (int i = 0; i < receivedDataSize - generatorSize + 1; i++) {
            std::cout << decodedData[i] << " ";
        }
        std::cout << std::endl;
        delete[] decodedData;
    }

    return 0;
}