Как можно отобразить шестнадцатеричные значения QByteArray без их преобразования в символы ASCII - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть короткая программа, которая читает данные из последовательного порта и сохраняет их в QByteArray.Когда я использую qDebug (), чтобы показать содержимое массива, некоторые из шестнадцатеричных значений отображаются, как и ожидалось, например.0xB5 остается 0xB5, но другие изменяются на ASCII, например.0x62 становится b.

Вот код, который я использую для чтения данных и отображения их с помощью qDebug:

void MainWindow::readSerial()
{
    QByteArray serialData = port->readAll();
    qDebug() << "SerialData: " <<serialData;
}

Программа выводит следующее:

SerialData: "\ xB5" "b \ x0B \ x01" "0 \ x00: \ x16Q \ x1E

но я ожидаю, что он выведет что-то вроде этого:

SerialData: \ xB5 \ 62 \ x0B ......

Мои вопросы:

  1. Автоматически ли конвертирует qDebugнекоторые шестнадцатеричные значения в ASCII

  2. , если это так, есть способ помешать ему сделать это

  3. Сохраняет ли QByteArray данные точно или можетпроблема в том, как я храню данные

Спасибо за вашу помощь. С уважением

1 Ответ

1 голос
/ 23 сентября 2019

Использование QByteArray::toHex().

void MainWindow::readSerial()
{
    QByteArray serialData = port->readAll();
    qDebug() << "SerialData: " << serialData.toHex(':');
}

SerialData: B5: 62: 0B

1) QDebug всегда показывает данные какпечатные символы.

2) Вы можете управлять выводом, используя операторы QTextStream.Это не поможет в этом случае, хотя.Длинный и сложный ответ - в коде (это где QDebug в конечном итоге заканчивается печатью QByteArray).

3) Да, он хранит данные в точности так, как указано.

...