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;
}