Добавить QByteArray к QDataStream?

Я должен заполнить QByteArray с разными данными. Так что я использую QDataStream,

QByteArray buffer;
QDataStream stream(&buffer, QIODevice::WriteOnly);

qint8 dataHex= 0x04;
qint8 dataChar = 'V';

stream << dataHex<< dataChar;
qDebug() << buffer.toHex();  // "0456"  This is what I want

Тем не менее, я также хотел бы добавить QByteArray к buffer,

QByteArray buffer;
QDataStream stream(&buffer, QIODevice::WriteOnly);

qint8 dataHex= 0x04;
qint8 dataChar = 'V';
QByteArray moreData = QByteArray::fromHex("ff");

stream << dataHex<< dataChar << moreData.data(); // char * QByteArray::data ()
qDebug() << buffer.toHex();  // "045600000002ff00"  I would like "0456ff"

Что мне не хватает?

3

Решение

когда char* добавляется, это предполагает \0 завершение и сериализуется с writeBytes который также сначала записывает размер (как uint32)

writeBytesДок:

Записывает спецификатор длины len и буфер s в поток и
возвращает ссылку на поток.

Len сериализуется как quint32, за которым следуют len байтов из s. Заметка
что данные не закодированы.

ты можешь использовать writeRawData обойти это:

stream << dataHex<< dataChar;
stream.writeRawData(moreData.data(), moreDate.size());
9

Другие решения

00000002 — это размер массива char, который записывается в поток.

3

Чего вам не хватает, так это QDataStream является не необработанные данные. Он имеет свой собственный простой формат сериализации. Это наиболее подходит для случаев использования, когда данные записываются (сериализуются) и считываются (десериализуются) с QDataStreamи с помощью надежного QIODevice (QBuffer или же QFile например).

Если вы хотите добавить необработанные данные в QBufferВы можете использовать подходящую перегрузку write метод. Но тогда вы можете просто добавить к QByteArray непосредственно.

2
По вопросам рекламы [email protected]