Я должен заполнить 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"
Что мне не хватает?
когда char*
добавляется, это предполагает \0
завершение и сериализуется с writeBytes
который также сначала записывает размер (как uint32)
Записывает спецификатор длины len и буфер s в поток и
возвращает ссылку на поток.Len сериализуется как quint32, за которым следуют len байтов из s. Заметка
что данные не закодированы.
ты можешь использовать writeRawData
обойти это:
stream << dataHex<< dataChar;
stream.writeRawData(moreData.data(), moreDate.size());
00000002 — это размер массива char, который записывается в поток.
Чего вам не хватает, так это QDataStream
является не необработанные данные. Он имеет свой собственный простой формат сериализации. Это наиболее подходит для случаев использования, когда данные записываются (сериализуются) и считываются (десериализуются) с QDataStream
и с помощью надежного QIODevice
(QBuffer
или же QFile
например).
Если вы хотите добавить необработанные данные в QBuffer
Вы можете использовать подходящую перегрузку write
метод. Но тогда вы можете просто добавить к QByteArray
непосредственно.