2016-12-01 3 views
0

Я пытаюсь найти способ идти через массив символов с п количеством шестнадцатеричных значений т.е. {0xA2, 0xE7, 0x5f, 0x1B, 0x11, 0x11, 0x00} и я хочу, чтобы попытаться сделать 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]; 
    } 
} 

Я думаю, что мой код должен делать свою работу, однако кварты не компилирует его и дает мне глупую ошибку «2248:«QByteArray :: оператор QNoImplicitBoolCast ': не может получить доступ к закрытому члену, объявленному в классе «QByteArray».

Любые идеи о том, как заставить его работать?

+0

В общем, вы не должны передавать вещи указателем, за исключением обстоятельств, которые явно требуют i т. По умолчанию вам следует передавать типы 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 
} 

и ваше призвание должно быть:

{ 
    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 &. 
} 

Примечания: если вы хотите использовать opeartor[] с указателями, вы должны использовать другой синтаксис:

void MainWindow::checkSum(QByteArray *b) 
{ 
    //... 
    xor = xor^b->operator[](i); 
} 
Смежные вопросы