daily pastebin goal
17%
SHARE
TWEET

Untitled

a guest Jun 14th, 2018 72 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "crc.h"
  4.  
  5.  
  6. int modPolynomial(char *nazwa_pliku_in, unsigned char reszta[], unsigned char wielomian[])
  7. {
  8.     unsigned char bufor_wejscia[BUFSIZE], kolejka[SIZECRC+BUFSIZE];
  9.     unsigned char maska=128, ostatni_bit, pierwszy_bit;
  10.     int n;
  11.     int licznik_bitow=0;
  12.     int licznik_bajtow_in=0, licznik_buforu=0;
  13.  
  14.     int i;
  15.     for (i=0; i<SIZECRC; i++)
  16.         reszta[i]=0;
  17.  
  18.     for (i=0; i<SIZECRC+BUFSIZE; i++)
  19.         kolejka[i]=0;
  20.  
  21.     FILE *wskaznik_pliku_in=NULL;
  22.     wskaznik_pliku_in=fopen(nazwa_pliku_in,"rb");
  23.  
  24.     if (wskaznik_pliku_in == NULL)
  25.     {
  26.         printf("Nie mozna otworzyc pliku: %s  \n", nazwa_pliku_in);
  27.         exit(EXIT_FAILURE);
  28.     }
  29.  
  30.     while((n=fread(bufor_wejscia,sizeof(unsigned char),BUFSIZE,wskaznik_pliku_in)))
  31.     {
  32.         //printf("Return fread %d\n",n);
  33.         for (i=0; i<n; i++)
  34.             kolejka[SIZECRC+i]=bufor_wejscia[i];
  35.         licznik_bitow=8*n;
  36.         licznik_bajtow_in+=n;
  37.  
  38.         while (licznik_bitow)
  39.         {
  40.             licznik_buforu=1+(licznik_bitow-1)/8;
  41.             //printf("Liczba bitow %d. Licznik buforu %d. \n", licznik_bitow, licznik_buforu);
  42.             pierwszy_bit=maska&kolejka[0];
  43.  
  44.             for (i=0; i<SIZECRC+licznik_buforu; i++)
  45.             {
  46.                 kolejka[i]=(kolejka[i]<<1);
  47.                 ostatni_bit=kolejka[i+1]>>7;
  48.                 kolejka[i]=kolejka[i]|ostatni_bit;
  49.                 //printf("Bajt %d kolejki po przesunieciu: %#x\n", i, kolejka[i]);
  50.             }
  51.             if (pierwszy_bit!=0)  //jesli pierwszy bit jest jedynka
  52.                 for(i=0; i<SIZECRC; i++)
  53.                 {
  54.                     kolejka[i]=kolejka[i]^wielomian[i];
  55.                     //printf("Bajt %d kolejki po xorowaniu: %#x\n", i, kolejka[i]);
  56.                 }
  57.             licznik_bitow--;
  58.  
  59.         } // end while
  60.     } // end while
  61.  
  62.     //printf("Sukcesywne dopisywanie degreegen zer na koncu kolejki.\n");
  63.     licznik_bitow=degreegen;
  64.  
  65.     while (licznik_bitow>0)
  66.     {
  67.         //printf("Liczba bitow %d\n", licznik_bitow);
  68.  
  69.         pierwszy_bit=maska&kolejka[0];
  70.         //printf("Pierwszy bit %#x\n", pierwszy_bit);
  71.         for (i=0; i<SIZECRC; i++)
  72.         {
  73.             kolejka[i]=(kolejka[i]<<1);
  74.             ostatni_bit=kolejka[i+1]>>7;
  75.             kolejka[i]=kolejka[i]|ostatni_bit;
  76.         }
  77.         //for(int i=0; i<SIZECRC+n; i++)
  78.         //   printf("Po przesunieciu bajt %d kolejki: %#x\n", i, kolejka[i]);
  79.         //Zero na koncu jest dopisywane z definicji przesuniecia
  80.         if (pierwszy_bit!=0)  //jesli pierwszy bit jest jedynka
  81.             for(i=0; i<SIZECRC; i++)
  82.             {
  83.                 kolejka[i]=kolejka[i]^wielomian[i];
  84.                 //printf("Bajt %d kolejki po xorowaniu: %#x\n", i, kolejka[i]);
  85.             }
  86.         licznik_bitow--;
  87.  
  88.     }// end while
  89.  
  90.     for(i=0; i<SIZECRC; i++)
  91.         reszta[i]=kolejka[i];
  92.  
  93.     return licznik_bajtow_in;
  94.  
  95. }
  96.  
  97. unsigned char * calculateCrc(char *fileName)
  98. {
  99.     unsigned char reszta[SIZECRC];
  100.     unsigned char gen[SIZECRC]={0,0,0,11};
  101.  
  102.     modPolynomial(fileName, reszta, gen);
  103.  
  104.     int i=0;
  105.         addCRC(fileName, reszta);
  106.  
  107.     for(i=0; i<4; i++){
  108.         printf("%d, ", reszta[i]);
  109.     }
  110. }
  111.  
  112. void addCRC(char * fileName, unsigned char crc[]){
  113.  
  114.     FILE * fp;
  115.  
  116.     if((fp = fopen(fileName, "rb+")) == NULL)
  117.     {
  118.         perror("ERROR");
  119.         exit(EXIT_FAILURE);
  120.     }
  121.  
  122.     int c;
  123.     fseek (fp, 0, SEEK_END);  //na koniec
  124.     int i;
  125.     for(i=0; i<SIZECRC; i++)
  126.     {
  127.         c = crc[i];
  128.         fputc(c, fp);
  129.     }
  130.     if(fclose(fp) != 0)
  131.     {
  132.         perror("fclose");
  133.         exit(EXIT_FAILURE);
  134.     }
  135.  
  136. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top