Zamiana kodu z działań na *char na działania na stringach

0

Witam.
Potrzebuję zamienić funkcję działającą na *char na działającą na string, tutaj to co udało mi się zrobić do tej pory :

FUNKCJA WYJŚCIOWA :

void Oblicz_CRC( char * txt ) {
    //Wartosc poczatkowa to (2^32)-1
    unsigned long crc32 = 0xffffffff;

    int wynik;
    char kod[ 20 ];

    //Liczba bajtow do przetworzenia
    int dlugosc;

    //Tekst, dla ktorego obliczymy crc32
    char * tekst;
    //------------------------------------------------------------

    //Przykladowy tekst
    tekst =( char * ) txt;
    //dlugosc = strlen(tekst);
    dlugosc = strlen( txt );
    //Obliczaj crc przesuwajac kolejne znaki tekstu wejsciowego
    while( dlugosc-- )
         crc32 =( crc32 >> 8 ) ^ tablica[( crc32 & 255 ) ^* tekst++ ];
    //Wykonaj operacje XOR z wartoscia poczatkowa
    wynik = crc32 ^ 0xffffffff;

    //Zamien wynik na hex
    itoa( wynik, kod, 16 );
    printf( "Tekst wejsciowy: %s\n", txt );
    printf( "Suma CRC32: %s\n", kod );
    printf( "Dowolny klawisz..." );

}

FUNKCJA PRZEROBIONA(lecz wyrzuca mi dwa błędy) :

void CRC( string txt ) {
    unsigned long crc32 = 0xffffffff;

    int result;
    char code[ 20 ];

    //Liczba bajtow do przetworzenia
    int length;

    //Tekst, dla ktorego obliczymy crc32
    string text;
    //------------------------------------------------------------

    //Przykladowy tekst
    text = txt;
    //dlugosc = strlen(tekst);
    length = txt.length();
    //Obliczaj crc przesuwajac kolejne znaki tekstu wejsciowego
    while( length-- )
         crc32 =( crc32 >> 8 ) ^ arr[( crc32 & 255 ) ^ text++ ]; //<----------------------------------------------------
    //Wykonaj operacje XOR z wartoscia poczatkowa
    result = crc32 ^ 0xffffffff;

    //Zamien wynik na hex
    itoa( result, code, 16 );
    cout << "Tekst wejsciowy: " << txt << endl;
    cout << "Suma CRC32: " << code << endl;
    cout << "Dowolny klawisz...";

}

Błędy w linijce zaznaczonej strzałką :
112 no operator++(int)' declared for postfix++', trying prefix operator instead
112 no match for 'operator++' in '++text'

Proszę o szybką odpowiedź.

0
crc32 =( crc32 >> 8 ) ^ tablica[( crc32 & 255 ) ^* tekst++ ];

Pomijając fakt, że ta cała linia to WTF, to z minutę się zastanawiałem, co to za operator ^*

Natomiast przerobiony kod to bardziej w ten deseń

for(int i = 0; length > 0; ++i, --length)
         crc32 =( crc32 >> 8 ) ^ arr[( crc32 & 255 ) ^ text[i]];
0

Niestety ale suma kontrolna nie jest teraz liczona poprawnie :/ Za każdym razem wyświetla sumę CRC32 : ffffffff
A co do ^ to operatorem jest jedynie ^, a chyba odnosi się do zmiennej.

0

Skorzystaj z iteratorów:

// Obliczaj crc przesuwając kolejne znaki tekstu wyjściowego
for (auto it = text.begin(); it != text.end(); ++it)
    crc32 = (crc32 >> 8) ^ arr[(crc32 & 255) ^ *it];

Albo:

// Range based loop
for (const char& c : text) {
    crc32 = (crc32 >> 8) ^ arr[(crc32 & 255) ^ c];
}

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