Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Suma kontrolna CRC-32

Ostatnio zmodyfikowano 2017-06-17 18:30
Autor Wiadomość
pekfos
» 2017-06-08 01:44:49
Rzutowanie chyba nie wystarczy, gdy tak bezmyślnie podstawiłeś zupełnie inne typy i o dziwo nie działa. Był przykładowy kod w tym temacie, jak przejść po stringu i była moja rada, żeby nie traktować danych na siłę jako tekstu, co jak na razie sprawia ci same problemy.
P-162231
1551
Temat założony przez niniejszego użytkownika
» 2017-06-08 01:47:24
Ale jestem mało doświadczony w tym temacie. Niestety nie jestem biegły w programowaniu, a muszę to zrobić na dzisiaj. Wszystko już mam napisane, jedyne co zostało to wykorzystać tę funkcję na stringach - i tutaj się zaciąłem i nie mogę ruszyć.
P-162232
pekfos
» 2017-06-08 02:40:14
crc32 =( crc32 >> 8 ) ^ tablica[( crc32 & 255 ) ^* tekst++ ];
Oznaczona wartość to znak wprowadzany do crc. Reszta już została podana.
P-162233
1551
Temat założony przez niniejszego użytkownika
» 2017-06-08 03:08:50
Dziękuję, ale zrobiłem już ze zamianą wprowadzanego stringa na const char*.
Jeszcze jak byś mógł mi pomóc. Uzyskałem wynik CRC32 w stringu zapisany w postaci hexadecymalnej. W jaki sposób mogę zapisać ten wynik do pliku w postaci dziesiętnej oraz binarnej ?
P-162234
pekfos
» 2017-06-08 03:22:38
Uzyskałeś wynik w postaci liczby. Żeby ją wypisać dziesiętnie, nie musisz nic specjalnego z nią robić. A binarnie - może przyjrzyj się, skąd masz tego stringa z postacią szesnastkową..?
P-162235
1551
Temat założony przez niniejszego użytkownika
» 2017-06-08 03:23:59
Jak mogę zamienić zmienną :
string x="f83debb7" na stringa z postacią decymalną ? Nie muszę go nigdzie przetrzymywać w innej zmiennej - wystarczy wyświetlenie.
P-162236
pekfos
» 2017-06-08 03:29:00
Jeśli musisz, możesz wczytać to do zmiennej liczbowej, np takim strtoul().
P-162237
1551
Temat założony przez niniejszego użytkownika
» 2017-06-08 08:32:15
Mam już całość, działa poprawnie tylko prosiłbym o wyjaśnienie mi jak działają te funkcje dokładnie. Są to funkcje ze stacka, przerabiałem je pod swoi program i ne do końca wiem jak działają. Mógłby mi ktoś łopatologicznie je opisać ?
C/C++
//Funkcja zamienia miejscami bity starsze z mlodszymi
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;
}


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;
}

unsigned int CRC( string txt ) {
    unsigned long crc32 = 0xffffffff;
   
    unsigned int result;
    char code[ 20 ];
   
    //Liczba bajtow do przetworzenia
    int length;
   
    const char * text = txt.c_str();
   
   
    length = strlen( text );
    //Obliczaj crc przesuwajac kolejne znaki tekstu wejsciowego
    while( length-- )
         crc32 =( crc32 >> 8 ) ^ arr[( crc32 & 255 ) ^* text++ ];
    //XOR z wartoscia poczatkowa
    result = crc32 ^ 0xffffffff;
   
    //Wynik w hex
    string ret = itoa( result, code, 16 );
    cout << "\n\n\n Tekst wejsciowy: " << txt;
    cout << "\n Suma CRC32: " << code;
    cout << "\n DEC : " << result;
   
    return result;
   
   
}

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 ?
P-162239
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona