Обрабатывать NULL как символ в QByteArray - PullRequest
0 голосов
/ 15 июня 2019

Я использую QT4.8, и мне нужно отправить массив на другое устройство, которое содержит некоторые значения 0x00.Однако QByteArray обрабатывает значение 0x00 на конец строки.Интересно, возможно ли это, чего я пытаюсь достичь?вот мой тестовый код: -

zeroissue::zeroissue(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);
    unsigned char zero = 0x00;
    QByteArray test;
    test.append("this is a test");
    test.append(zero);
    test.append("test complete");
    qDebug() << "test = " << test;
}

Пожалуйста, предложите мне способ обработки 0x00 как символа в QByteArray.

1 Ответ

2 голосов
/ 15 июня 2019

Интересно, возможно ли это,

Да, это так. Из документации QByteArray :

QByteArray может использоваться для хранения как необработанных байтов (включая «\ 0»), так и традиционных 8-разрядных строк с «\ 0».

Следующая функция main работает как положено

int main(int argc, char** argv)
{
   char null_char = '\0';
   QByteArray test;
   test.append("this is a test");
   std::cout << "size(): " << test.size() << std::endl;

   test.append(null_char);
   std::cout << "size(): " << test.size() << std::endl;

   test.append("test complete");
   std::cout << "size(): " << test.size() << std::endl;

   return 0;
}

и выдает следующий ожидаемый результат:

size(): 14
size(): 15
size(): 28

Когда вы используете

qDebug() << "test = " << test;

вы должны увидеть встроенный нулевой символ в выводе. См. https://doc.qt.io/qt-5/qdebug.html#operator-lt-lt-20 для получения дополнительной информации.

...