2016-12-01 14 views
0

У меня есть проблема, которая прослушивается более часа и решила просто спросить здесь. Есть ли правильный способ преобразования QByteArray в char? Мне удалось заставить его работать как char *, но мне нужно передать его как символ.Преобразование QByteArray в char (не char * или constChar *)

Вот код немного, где я беру QByteArray и преобразовать его в символ *:

QByteArray MainWindow::checkSum(QByteArray &b) 
    { 
     qint16 b_len = b.length(); 

     char xor = 0; 

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

     return b; 
    } 

    void MainWindow::on_flipHorzButton_clicked() 
    { 
     // getFirmwareVersion = { 0xe6, 0x05, 0x12, 0x00} 
     QByteArray str; 

     char ch = checkSum(str).data(); 

     str[0] =0xaa; 
     str[1] =0xbb; 
     str[2] =0xcc; 
     str[3] =0xdd; 
     str[4] = ch; 
     printf("%s", str[4]); 
     serial.write(str, 5); 
} 

Должен ли я попытаться преобразовать ч обугливаться? Если да, как мне это сделать?

+2

Это неясно, чего вы хотите. just char - 1 символ – Starl1ght

+0

Я в процессе добавления дополнительного кода. Дайте мне одну секунду. :) –

+0

Почему? Для чего вы хотите * одиночный символ *? Как может целая строка символов когда-либо вписываться в один байт, который предоставляет 'char'? Что такое * актуальная проблема, которую вы хотите решить ([связанное чтение о проблеме XY] (http://xyproblem.info/))? –

ответ

1

По какой-то причине мне пришлось переименовать «xor» в нечто другое.

Для вашей конкретной проблемы, вы должны изменить эту строку:

char ch = checkSum(str).data()[0]; 

Так что она возвращает первый символ полукокса * от QByteArray

+0

Это сработало! Огромное спасибо!!! –

+1

Как отмечал PsiX, будьте осторожны с вашим «xor». Это зарезервированное слово и может вызвать проблемы в будущем. –

0

Ваш код не работает, как исключающего зарезервированное ключевое слово: xor Переименуйте переменную в нечто другое.