Narzędzia użytkownika

Narzędzia witryny


crc

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Next revision
Previous revision
crc [2009/04/30 00:32]
qboosh utworzono
crc [2009/04/30 00:47] (aktualna)
qboosh
Linia 7: Linia 7:
 ===== Wstęp ===== ===== Wstęp =====
  
-Biblioteka Boost::CRC należy do typu Header-only biblioteki boost. Biblioteka ta wspiera dwa szablony klas służące do  +Biblioteka Boost::CRC należy do typu Header-only biblioteki boost. Biblioteka ta wspiera dwa szablony klas służące do tworzenia obiektów mogących obliczać i/lub sprawdzać poprawność cyklicznego kodu nadmiarowego (CRC ang. Cyclic Redundancy Check). Nagłówek ten zawiera także szablony funkcji pozwalających obliczyć CRC.
- +
-tworzenia obiektów mogących obliczać i/lub sprawdzać poprawność cyklicznego kodu nadmiarowego (CRC ang. Cyclic Redundancy ​ +
- +
-Check). Nagłówek ten zawiera także szablony funkcji pozwalających obliczyć CRC.+
  
  
 ===== CRC - Wprowadzenie ===== ===== CRC - Wprowadzenie =====
  
-Jest to kod nadmiarowy, pozwalający wykryć błędy w transmisji bloków danych. Jego obliczanie polega na podzieleniu wielomianu ​ +Jest to kod nadmiarowy, pozwalający wykryć błędy w transmisji bloków danych. Jego obliczanie polega na podzieleniu wielomianu utworzonego z ciągu bitów (na zasadzie 1101 -> x^3 + x^2 + 1) z ustalonym dla danego algorytmu wielomianem CRC. Wynikowym blokiem nadmiarowym jest reszta powstała z tego dzielenia (iloraz jest odrzucany). Stopień wielomianu reszty (odpowiadający jego długości bitowej), jest nie większy niż pomniejszony o 1 stopień wielomianu dzielnika CRC.
- +
-utworzonego z ciągu bitów (na zasadzie 1101 -> x^3 + x^2 + 1) z ustalonym dla danego algorytmu wielomianem CRC. Wynikowym ​ +
- +
-blokiem nadmiarowym jest reszta powstała z tego dzielenia (iloraz jest odrzucany). Stopień wielomianu reszty (odpowiadający ​ +
- +
-jego długości bitowej), jest nie większy niż pomniejszony o 1 stopień wielomianu dzielnika CRC. +
  
 ===== Parametry ===== ===== Parametry =====
Linia 29: Linia 18:
 W Boost:CRC użytkownik może sterować działaniem klas obliczających CRC mając do dyspozycji poniższe parametry: W Boost:CRC użytkownik może sterować działaniem klas obliczających CRC mając do dyspozycji poniższe parametry:
  
- * **''​Truncated polynominal''​** - Skrócony wielomian dzielący. Skrócenie polega na opuszczeniu pierwszego bitu +  ​* **''​Truncated polynominal''​** - Skrócony wielomian dzielący. Skrócenie polega na opuszczeniu pierwszego bitu (odpowiadającemu współczynnikowi przed najwyższą potęgą wielomianu),​ ponieważ bit ten zawsze jest równy 1. W innym przypadku byłby to wielomian niższego rzędu niż zakładany.
  
-(odpowiadającemu współczynnikowi przed najwyższą potęgą wielomianu)ponieważ bit ten zawsze jest równy 1W innym przypadku ​+  * **''​Initial remainder''​** - początkowa wartość reszty z dzielenia - wprowadzona po to by uniknąć "​ślepych punktów"​czyli sytuacji w których dla pewnych szczególnych wiadomości,​ ich kod CRC będzie zaczynał się od samych zer.
  
-byłby ​to wielomian niższego rzędu niż zakładany.+  * **''​Final XOR value''​** - ciąg bitów z którymi wartość końcowa CRC jest XOR'​owana. Zazwyczaj jest to ciąg samych zer lub samych jedynek.
  
- * **''​Initial remainder''​** - początkowa wartość reszty z dzielenia - wprowadzona po to by uniknąć "​ślepych punktów",​ czyli +  ​* **''​Reflected input''​** - parametr typu boolean określający czy ciąg wejściowy ma być odwracany przed obliczeniem kodu nadmiarowego.
  
-sytuacji w których dla pewnych szczególnych wiadomości,​ ich kod CRC będzie zaczynał się od samych zer. +  ​* **''​Reflected output''​** - parametr typu boolean określający czy ciąg wyjściowy (kod nadmiarowy) ma być odwrócony. Dla obu powyższych parametrów przez odwrócenie rozumiemy zamianę miejscami bitu pierwszego z ostatnim, drugiego z przedostatnim itd.
- +
- * **''​Final XOR value''​** - ciąg bitów z którymi wartość końcowa CRC jest XOR'​owana. Zazwyczaj jest to ciąg samych zer lub  +
- +
-samych jedynek. +
- +
- * **''​Reflected input''​** - parametr typu boolean określający czy ciąg wejściowy ma być odwracany przed obliczeniem kodu  +
- +
-nadmiarowego. +
- +
- * **''​Reflected output''​** - parametr typu boolean określający czy ciąg wyjściowy (kod nadmiarowy) ma być odwrócony. Dla obu  +
- +
-powyższych parametrów przez odwrócenie rozumiemy zamianę miejscami bitu pierwszego z ostatnim, drugiego z przedostatnim itd.+
  
 Dostęp do parametrów jest umożliwiony przez odpowiednie metody "​get"​. Dostęp do parametrów jest umożliwiony przez odpowiednie metody "​get"​.
- 
  
  
 ===== Klasa Podstawowa boost::​crc_basic ===== ===== Klasa Podstawowa boost::​crc_basic =====
  
-Jest to szablon, który jako jedyny parametr przyjmuje Skrócony wielomian dzielący (Truncated polynominal). Kolejne parametry ​ +Jest to szablon, który jako jedyny parametr przyjmuje Skrócony wielomian dzielący (Truncated polynominal). Kolejne parametry podawane są w konstruktorze. Jest to implementacja nieoptymalna. Kod nadmiarowy jest obliczany bit po bicie. ​
- +
-podawane są w konstruktorze. Jest to implementacja nieoptymalna. Kod nadmiarowy jest obliczany bit po bicie. ​Poniżej  +
- +
-przykładowa definicja obiektu klasy podstawowej:​+
  
 +Poniżej przykładowa definicja obiektu klasy podstawowej:​
 <code cpp> <code cpp>
 +//Parametr szablonu - Rozmiar
 +//Parametry konstruktora - Truncated polynominal,​ Initial remainder, Final XOR value, Reflected input, Reflected output
 boost::​crc_basic<​8> ​ crc_podstawowa( 0x25, 0x00, 0, false, false ); boost::​crc_basic<​8> ​ crc_podstawowa( 0x25, 0x00, 0, false, false );
 </​code>​ </​code>​
Linia 69: Linia 44:
 ===== Klasa Optymalna boost::​crc_optimal ===== ===== Klasa Optymalna boost::​crc_optimal =====
  
-Szablon którego parametrami są wszystkie wymienione powyżej parametry. Jego zaletą jest to, że kod liczony jest jako całość ​ +Szablon którego parametrami są wszystkie wymienione powyżej parametry. Jego zaletą jest to, że kod liczony jest jako całość co pozwala na optymalizację obliczeń. Ponadto parametry zazwyczaj są niezmienne więc korzystne jest wprowadzenie ich w czasie kompilacji (w odróżnieniu od klasy Podstawowej). ​
- +
-co pozwala na optymalizację obliczeń. Ponadto parametry zazwyczaj są niezmienne więc korzystne jest wprowadzenie ich w czasie ​ +
- +
-kompilacji (w odróżnieniu od klasy Podstawowej). ​Przykładowa definicja:+
  
 +Przykładowa definicja:
 <code cpp> <code cpp>
 +//Parametry szablonu: Rozmiar, Truncated polynominal,​ Initial remainder, Final XOR value, Reflected input, Reflected output
 boost::​crc_optimal<​8,​ 0x25, 0x00, 0, false, false> ​ crc_optymalna;​ boost::​crc_optimal<​8,​ 0x25, 0x00, 0, false, false> ​ crc_optymalna;​
 </​code>​ </​code>​
Linia 81: Linia 54:
 ===== Operacje ===== ===== Operacje =====
  
- * **''​void process_bit( bool bit );''​** -> przetworzenie pojedynczego bitu (wyłącznie dla klasy Podstawowej) +  ​* **''​void process_bit( bool bit );''​** -> przetworzenie pojedynczego bitu (wyłącznie dla klasy Podstawowej)
- +
- * **''​void process_bits( unsigned char bits, std::size_t bit_count );''​** -> przetworzenie dowolnej ilości bitów (wyłącznie  +
- +
-dla klasy podstawowej) +
- +
- * **''​void process_byte( unsigned char byte );''​** -> przetworzenie pojedynczego bajtu+
  
- * **''​void ​process_blockvoid const *bytes_beginvoid const *bytes_end ​);''​** -> przetworzenie ​bloku bajtów ​(parametrami ​+  ​* **''​void ​process_bitsunsigned char bitsstd::size_t bit_count ​);''​** -> przetworzenie ​dowolnej ilości bitów ​(wyłącznie dla klasy podstawowej)
  
-są początek i koniec)+  * **''​void process_byte( unsigned char byte );''​** -> przetworzenie pojedynczego bajtu
  
- * **''​void ​process_bytes( void const *bufferstd::size_t byte_count ​);''​** -> przetworzenie ​dowolnej ilości ​bajtów+  ​* **''​void ​process_block( void const *bytes_beginvoid const *bytes_end ​);''​** -> przetworzenie ​bloku bajtów ​(parametrami są początek i koniec)
  
- * **''​value_type checksum(const;''​** -> zwrócenie aktualnej wartości reszty kodowej+  ​* **''​void process_bytesvoid const *buffer, std::size_t byte_count );''​** -> przetworzenie dowolnej ilości bajtów
  
- * **''​void operator ​()( unsigned char byte );''​** -> przeciążony operator, woła process_byte (wyłącznie dla klasy +  ​* **''​value_type checksum() const;''​** -> zwrócenie aktualnej wartości reszty kodowej
  
-optymalnej)+  * **''​void operator ()( unsigned char byte );''​** -> przeciążony operator, woła process_byte (wyłącznie dla klasy optymalnej)
  
- * **''​value_type operator ()() const;''​** -> zwraca aktualną wartość reszty kodowej (wyłącznie dla klasy optymalnej)+  ​* **''​value_type operator ()() const;''​** -> zwraca aktualną wartość reszty kodowej (wyłącznie dla klasy optymalnej)
  
  
 ===== Kod z przykładowym wykorzystaniem ===== ===== Kod z przykładowym wykorzystaniem =====
-{{boostcrc.cpp}}+{{boostcrcexample.cpp}}
crc.1241044328.txt.gz · ostatnio zmienione: 2009/04/30 00:32 przez qboosh