CRC8, CRC16, CRC32 - jak sprawdzić poprawność sumy ( C/C++ )

0

Witam,

W linku http://dl.dropbox.com/u/3336780/CRC.rar do pobrania znajdują się pliki ze źródłami do obliczania CRC (jak w temacie). Są to odpowiednio skorygowane kody ze strony
<url>http://www.koders.com/cpp/fid692C401641AF50B584984F6A0A331403455038E1.aspx?s=md5 </url>

pozamieniałem tylko takie rzeczy jak "byte" na "unsigned char" itp.

Aby przetestować owe algorytmy stworzylem sobie odpowiednie dane symulujące przesyłane dane po stronie nadajnika:

unsigned char buf8[] = {0x0,0x1,0x2,0x3,0x4,0x5,0x6}; //2f 
unsigned char buf16[] = {0x0,0x1,0x2,0x3,0x4,0x5,0x6}; //28c2 
unsigned char buf32[] = {0x0,0x1,0x2,0x3,0x4,0x5,0x6}; //ad5809f9 

W komentarzu są wyliczone sumy.
Wygląda na to, że algorytmy działaja - wyniki reprezentowane są na odpowiedniej liczbie bajtów zgodnie z oczekiwaniami

unsigned char crc_8_sum; 
unsigned short crc_16_sum; 
unsigned long int crc_32_sum; 

Chciałbym jednak przetestować poprawność po stronie odbiornika, a więc zgodnie z teorią odbiornik wylicza ponownie sume kontrolną na podstawie wysyłanych danych + przesłanej sumy kontrolnej w wyniku której powinno uzyskać się wartość 0 co oznacza prawidłową transmisje. Stworzyłem, więc następujące tablice, w których dopisałem na końcu obliczone wcześniej wartości:

unsigned char check8[] = {0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x2f}; // dopisane 2f 
unsigned char check16[] = {0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x28,0xc2}; // dopisane 28c2 
unsigned char check32[] = {0x0,0x1,0x2,0x3,0x4,0x5,0x6,0xad,0x58,0x09,0xf9}; //dopisane ad5809f9 

Dla CRC8 oraz CRC16 rezultat jest zgodny z oczekiwanym, ale dla CRC32 wartość jest różna od zera.

Czy mój sposób testowania jest błędny czy jednak problem jest w kodzie?

0

to, ze w inych wyszlo zero to chyba przypadek. Generalnie powinno sie dac ciag znakow 00000 na koncu potem w to miejsce wstawic sume i to powinno dac zero. Ale w tych mamy jescze wartsci poczatkowe i koncowe (z ktorymi xorujemy).

Odsylam do milego kursu "CRC doda Ci pewności" Elektronika Praktyczna (kilka numerow 2)/2003

1 użytkowników online, w tym zalogowanych: 0, gości: 1