2016-12-01 527 views
0

我試圖找到通過字符數組要與十六進制值,即n個量的方式{0xA2,0xE7,0x5F的,0x1B,0×11,0×11,0×00},我想嘗試做一個XOR校驗和通過所有在它的項目 - 更精確的A2^E7^5F^1B^11^00是。Qt用於校驗和的C++ xor?

這裏是我的代碼位:

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

我想我的代碼應該做的工作不過Qt不編譯它,給我的「2248愚蠢的錯誤:「的QByteArray ::運算QNoImplicitBoolCast ':無法訪問類'QByteArray'''中聲明的私有成員。

如何使它工作的任何想法?

+0

一般情況下,你不應該路過指針的東西,除非明確要求我的情況噸。默認情況下,當它們在參數中時,你應該通過const引用來傳遞Qt類型,當它們是out-arguments時通過引用來傳遞Qt類型。傳統上,通過指針或指向const的'QObject'和派生類。小值類型,例如從'QFlags'派生的類型,應該按值傳遞。 –

+0

你可以在這裏查看您的結果:http://www.th-thielemann.de/tools/checksum.html –

回答

2

您使用b作爲指針。

爲了使用operator[](在一般情況下,所有operator XX和賦值運算符),你應該使用一個對象或一個引用對象,而不是一個指針。

你應該修改你的函數:

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

和您的電話應該是:

​​

注意:如果你想使用opeartor[]使用指針,你應該使用不同的sintax:

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