[text] Cn2

Viewer

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. unsigned int crc_table[256];
  5.  
  6. void generate_crc_table() {
  7.     unsigned int crc, i, j;
  8.     
  9.     for (i = 0; i < 256; i++) {
  10.         crc = i;
  11.         
  12.         for (j = 0; j < 8; j++) {
  13.             if (crc & 0x01)
  14.                 crc = (crc >> 1) ^ 0xEDB88320;
  15.             else
  16.                 crc >>= 1;
  17.         }
  18.         
  19.         crc_table[i] = crc;
  20.     }
  21. }
  22.  
  23. unsigned int calculate_crc(const unsigned char *polynomial, const unsigned char *divisor) {
  24.     unsigned int crc = 0xFFFFFFFF;
  25.     unsigned int poly_length = strlen(polynomial);
  26.     unsigned int divisor_length = strlen(divisor);
  27.     
  28.     for (unsigned int i = 0; i < poly_length; i++) {
  29.         crc ^= polynomial[i];
  30.         
  31.         for (unsigned int j = 0; j < 8; j++) {
  32.             if (crc & 0x01)
  33.                 crc = (crc >> 1) ^ crc_table[(crc ^ divisor[j]) & 0xFF];
  34.             else
  35.                 crc >>= 1;
  36.         }
  37.     }
  38.     
  39.     return crc;
  40. }
  41.  
  42. void print_binary(unsigned int value) {
  43.     if (value > 1)
  44.         print_binary(value >> 1);
  45.     printf("%d", value & 1);
  46. }
  47.  
  48. int main() {
  49.     char polynomial[100];
  50.     char divisor[100];
  51.     
  52.     printf("Enter the polynomial in binary: ");
  53.     scanf("%s", polynomial);
  54.     
  55.     printf("Enter the divisor in binary: ");
  56.     scanf("%s", divisor);
  57.     
  58.     generate_crc_table();
  59.     unsigned int crc = calculate_crc((const unsigned char*)polynomial, (const unsigned char*)divisor);
  60.     
  61.     printf("CRC: ");
  62.     print_binary(crc);
  63.     printf("\n");
  64.     
  65.     return 0;
  66. }
  67.  

Editor

You can edit this paste and save as new:


File Description
  • Cn2
  • Paste Code
  • 02 Jun-2023
  • 1.55 Kb
You can Share it: