Advertisement
Guest User

Untitled

a guest
Apr 26th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.61 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <string>
  3. #include <iostream>
  4. #include <fstream>
  5.  
  6. using namespace std;
  7.  
  8. int crc(string nazwa_pliku_wejsciowego, ifstream &plik_odczyt)
  9. {
  10.     unsigned char bajt;
  11.     bool wynik;
  12.    
  13.     unsigned long wielomian = 0x04c11db7;
  14.     unsigned long liczba = 0x00000000;
  15.     unsigned long zmienna = 0;
  16.     unsigned long najstarszy_bit = 0;
  17.    
  18.     plik_odczyt.open(nazwa_pliku_wejsciowego.c_str(), ios::binary);
  19.    
  20.     while(true)
  21.     {          
  22.         bajt = plik_odczyt.get();
  23.  
  24.         wynik = plik_odczyt.good();
  25.         if(!wynik) break;
  26.            
  27.         for(int i=7; i>=0; i--)
  28.         {
  29.             najstarszy_bit = liczba&0x80000000;
  30.            
  31.             zmienna = int(bajt);
  32.             zmienna = zmienna>>i;
  33.             zmienna = zmienna&(0x01);
  34.            
  35.             liczba = liczba<<1;
  36.             liczba = liczba|zmienna;
  37.            
  38. //          najstarszy_bit = liczba&(0x80000000);
  39.            
  40.             if(najstarszy_bit == 0x80000000)
  41.             {
  42.                 liczba = liczba^wielomian;
  43.             }  
  44.         }
  45.     }
  46.    
  47.     for(int i=0; i<32; i++)
  48.     {
  49.         najstarszy_bit = liczba&0x80000000;
  50.        
  51.         liczba = liczba<<1;
  52.        
  53. //      najstarszy_bit = liczba&(0x80000000);
  54.    
  55.         if(najstarszy_bit == 0x80000000)
  56.         {
  57.             liczba = liczba^wielomian;
  58.         }
  59. //      cout<<" "<<liczba<<endl;
  60.     }
  61.  
  62.     plik_odczyt.close();  
  63.    
  64.     return liczba;
  65. }
  66.  
  67.  
  68.  
  69. void stworz_plik(unsigned long crc, ofstream &plik_zapis)
  70. {
  71.      string nowa_nazwa_pliku;
  72.  
  73.      plik_zapis.open("lab5.crc32", ios::binary);
  74.      int zmienna;
  75.      int tekst;
  76.      
  77.      
  78.      
  79.      tekst = crc>>24;
  80.      tekst = tekst&(0x000000ff);
  81.      
  82.      plik_zapis<<char(tekst);
  83.      
  84.      tekst = crc>>16;
  85.      tekst = tekst&(0x000000ff);
  86.      plik_zapis<<char(tekst);
  87.      
  88.      tekst = crc>>8;
  89.      tekst = tekst&(0x000000ff);
  90.      plik_zapis<<char(tekst);
  91.      
  92.      tekst = crc>>0;
  93.      tekst = tekst&(0x000000ff);
  94.      plik_zapis<<char(tekst);
  95.      
  96.      plik_zapis<<endl;
  97.      
  98.       for(int i=31; i>=0; i--)
  99.      {
  100.      zmienna = crc>>i;
  101.      zmienna = zmienna&(0x01);
  102.      plik_zapis<<zmienna;
  103.      }
  104.      plik_zapis<<endl;
  105.      
  106.      plik_zapis<<hex<<crc<<endl;
  107.      plik_zapis<<dec<<crc<<endl;
  108.      
  109.      
  110.      
  111.      plik_zapis.close();
  112.  
  113.  
  114.  
  115. }
  116.  
  117.    
  118. int main(int argc, char *argv[])
  119. {
  120.     string nazwa_pliku_wejsciowego;
  121.    
  122.     if (argc<2)
  123.     {
  124.         cout<<"Nie podano nazwy pliku jako parametru wejsciowego!"<<endl;
  125.         return -1;
  126. //      return -1;
  127.     }
  128.    
  129.     nazwa_pliku_wejsciowego = argv[1];
  130.     cout<<"Podana nazwa pliku: "<<nazwa_pliku_wejsciowego<<endl;
  131.    
  132.     ifstream plik_odczyt;
  133.     ofstream plik_zapis;
  134.     int wynik = crc(nazwa_pliku_wejsciowego, plik_odczyt);
  135.     cout<<hex<<wynik<<endl;
  136.     stworz_plik(wynik, plik_zapis);
  137.    
  138.    
  139.    
  140.    
  141.  
  142. //  system("pause");
  143.     return 0;
  144.    
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement