2016-12-01 2 views
0

Ich versuche, einen Weg zu gehen durch einen char-Array mit n Menge von hexadezimalen Werten zu finden, dh {0xA2, 0xE7, 0x5F, 0x1B, 0x11, 0x11, 0x00} und ich mag eine XOR versuchen und zu tun Prüfsumme durch alle Elemente darin - um genauer zu sein ist A2^E7^5F^1B^11^00 . HierQt C++ xor für eine Prüfsumme?

ist das Bit von meinem Code:

void MainWindow::checkSum(QByteArray *b) 
{ 
    qint16 b_len = b->length(); 

    unsigned char xor = 0; 

    for (int i = 0 ; i < b_len ; i ++) 
    { 
     xor = xor^b[i]; 
    } 
} 

ich meinen Code denken sollte die Arbeit jedoch tun qt es nicht kompilieren lässt und gibt mir die dummen Fehler „2248:‚QByteArray :: operator QNoImplicitBoolCast ': kann nicht auf das private Mitglied zugreifen, das in der Klasse' QByteArray 'deklariert ist ".

Irgendwelche Ideen, wie man es zum Laufen bringt?

+0

Im Allgemeinen sollten Sie die Dinge nicht mit dem Zeiger übergeben, außer unter Umständen, die eindeutig verlangen, dass ich t. Standardmäßig sollten Sie Qt-Typen durch const-Referenz übergeben, wenn sie In-Argumente sind, und als Referenz, wenn sie out-Argumente sind. Es ist üblich, 'QObject' und abgeleitete Klassen durch Zeiger oder Zeiger-zu-Konst zu übergeben. Kleine Werttypen, z. B. Typen, die von 'QFlags' abgeleitet sind, sollten als Wert übergeben werden. –

+0

Sie können Ihr Ergebnis hier einsehen: http://www.th-thielemann.de/tools/checksum.html –

Antwort

2

Sie verwenden b als Zeiger.

Um operator[] (und im Allgemeinen alle operator XX und Zuweisungsoperatoren) zu verwenden, sollten Sie ein Objekt oder einen Verweis auf ein Objekt, kein Zeiger verwenden.

Sie sollten Ihre Funktion ändern:

void MainWindow::checkSum(const QByteArray &b) 
{ 
    //Same code as yours 
} 

und Ihre Berufung sollte sein:

{ 
    QByteArray ba; 

    //Fill ba. 

    //Now you should not pass a pointer 
    //checkSum(&ba) //This should be similar to your call. 
    checkSum(ba); //Now, there is no &. 
} 

Hinweis: Wenn Sie opeartor[] mit Zeigern verwenden möchten, sollten Sie einen anderen sintax verwenden:

void MainWindow::checkSum(QByteArray *b) 
{ 
    //... 
    xor = xor^b->operator[](i); 
}