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?