@sddvxd

Почему первые 4 байта QString заняты?

Здравствуйте

Читаю строку "привет", написанную мной в виджете QLineEdit:

QByteArray arrBlock;
    QDataStream bufferOut(&arrBlock, QIODevice::WriteOnly);
    bufferOut.setVersion(QDataStream::Qt_5_3);
    bufferOut << pLineEdit->text();


В режиме отладки смотрю содержимое массива байт (arrBlock):

0x00 0x00 0x00 0x0C - непонятная мне структура
        0x04 0x3f 0x04 0x40 0x04 0x38 0x04 0x32 0x04 0x35 0x04 0x42 - "привет" в UNICODE


Зачем мне нужно было это все? Я передаю эти байты на сервер и пытаюсь их как-то отобразить на экране:

QString str(byteArray);
    pTextEdit->append(str);


Байты приходят в целости и сохранности, но в QTextEdit вылезают битые символы, вернее только первый символ. Понять не могу, беру, беру значение типа, инициализирую его тем-же типом, а выходит не так, как я запланировал

Мое предположение - пока писал подумал, что первые 4 байта зарезервированы QString для обозначения количества байт, чтобы обозначить длину строки и это какой-нибудь quint64 (long), ведь строка "привет" состоит из 12 байт, а 4 байт в данных QString, именно 0C. Не подскажете, что делать в данном случае?
  • Вопрос задан
  • 238 просмотров
Решения вопроса 2
Ni55aN
@Ni55aN
Похоже, что первые 32 бита выделяются под значение, указывающее на длину строки
Ответ написан
Комментировать
@sddvxd Автор вопроса
Все, понял. bufferOut << pLineEdit->text(); возвращает объект QString, уже инициализированный строкой из QLineEdit, а значит у него уже стоит длина 12. Из-за своего малого опыта я думал, что мне вернется строка, но вернулся весь объект QString
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы