Suma kontrolna CRC-32
Ostatnio zmodyfikowano 2017-06-17 18:30
1551 Temat założony przez niniejszego użytkownika |
» 2017-06-15 17:14:35 Mógłby mi ktoś wyjaśnić te zapisy?
@EDIT Nadal potrzebuję jasnego wyjaśnienia, bo nie wszystko jest zrozumiałe. |
|
pekfos |
» 2017-06-17 02:36:19 Może jakbyś zadał jakieś jasne i konkretne pytanie, a nie "mam już kod, proszę mi opisać jak działa" i też nie jakiś bełkot o wylizywaniu.. Np. Tworzenie tablicy z kodami ASCII, po co tam s ale przesunięcia bitowe oraz w samej funkcji CRCw jaki sposób jest to wylizane ? |
|
|
1551 Temat założony przez niniejszego użytkownika |
» 2017-06-17 14:11:49 unsigned long change_bits( unsigned long value, char l_bits ) { unsigned long result = 0; for( int i = 1; i <( l_bits + 1 ); i++ ) { if( value & 1 ) result |= 1 <<( l_bits - i ); value >>= 1; } return result; }
Co tutaj oznaczają linijki result |= 1 <<( l_bits - i ); - nadpisuje wartość result przez result | 1 <<( l_bits - i ); , ale nie wiem do końca jak działa zapis 1 <<( l_bits - i ); . void newarray() { for( int i = 0; i < 256; i++ ) { arr[ i ] = change_bits( i, 8 ) << 24; for( int j = 0; j < 8; j++ ) { if(( arr[ i ] &( 1 << 31 ) ) != 0 ) arr[ i ] =( arr[ i ] << 1 ) ^ P; else arr[ i ] =( arr[ i ] << 1 ); } arr[ i ] = change_bits( arr[ i ], 32 ); } return; } Tutaj domyślam się, że tworzy tablicę używaną później do liczenia CRC, ale nie rozumiem do końca zapisów arr[ i ] = change_bits( i, 8 ) << 24; oraz if(( arr[ i ] &( 1 << 31 ) ) != 0 ) arr[ i ] =( arr[ i ] << 1 ) ^ P; else arr[ i ] =( arr[ i ] << 1 ); Dlaczego tutaj używamy zamiany bitów starszych z młodszymi ? unsigned int CRC( string txt ) { unsigned long crc32 = 0xffffffff; unsigned int result; char code[ 20 ]; int length; const char * text = txt.c_str(); length = strlen( text ); while( length-- ) crc32 =( crc32 >> 8 ) ^ arr[( crc32 & 255 ) ^* text++ ]; result = crc32 ^ 0xffffffff; string ret = itoa( result, code, 16 ); cout << "\n\n\n Tekst wejsciowy: " << txt; cout << "\n Suma CRC32: " << code; cout << "\n DEC : " << result; return result; } Tutaj w komentarzach zadałem pytania, aby klarowniej przedstawić czego nie rozumiem. "Wylizanie" w poprzednim poście to była najzwyklejsza literówka i nie ma potrzeby się złościć. |
|
pekfos |
» 2017-06-17 16:44:25 Zacznijmy od tego, że zadanie jest zrobione nie na temat.. Nie mogę również używać "sposobu tablicowego" - "do wyznaczenia CRC-32 należy wykorzystać podstawowy algorytm dzielenia ciągu danych (bajtów 8-bitowych) odczytywanych z zadanego pliku wejściowego przez wielomian generujący CRC bit po bicie." |
Jeśli ten kod nie jest 'sposobem tablicowym', to nie wiem co jest. To nie jest algorytm, jaki miałeś zaimplementować, tylko jego zoptymalizowany odpowiednik. https://www.quora.com/What-is-an-intuitive-explanation-of-the-CRC-cyclic-redundancy-check-algorithmTu masz jakiś opis algorytmu, chociaż zaznaczyłeś wyraźnie na samym początku, że wiesz, co robisz (czy raczej, co masz zrobić). Co do samego opisywania kodu: "Wylizanie" w poprzednim poście to była najzwyklejsza literówka i nie ma potrzeby się złościć. |
Całe tamto zdanie to literówka. Jeśli nie możesz poświecić minuty na przeczytanie tego, co napisałeś, to nie masz podstaw oczekiwać, że ktokolwiek poświęci minutę na czytanie tego drugi raz, by zrozumieć o co ci właściwie chodzi. |
|
1551 Temat założony przez niniejszego użytkownika |
» 2017-06-17 18:30:41 Miałem zamiar robić to bit po bicie, ale okazało się, że jest możliwość implementacji tablicowej lecz trzeba kod rozumieć. I tutaj jest problem. Spróbuję jakoś na spokojnie rozpisać te działania na kartce. |
|
1 2 3 « 4 » |