将QByteArray附加到QDataStream?

The*_*eer 3 c++ qt qbytearray qdatastream

我必须QByteArray使用不同的数据填充a .所以我正在使用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
Run Code Online (Sandbox Code Playgroud)

但是,我还想将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"
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

rat*_*eak 12

当a char*附加时,它假定\0终止和序列化,writeBytes并且首先写出大小(如uint32)

writeBytes'doc:

将长度说明符len和缓冲区s写入流并返回对流的引用.

len被序列化为quint32,后跟来自s的len个字节.请注意,数据未编码.

你可以用writeRawData它来规避它:

stream << dataHex<< dataChar;
stream.writeRawData(moreData.data(), moreDate.size());
Run Code Online (Sandbox Code Playgroud)