我必须使用不同的数据填充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"
我错过了什么?
答案 0 :(得分:10)
当附加char*
时,它会假定\0
终止,并使用writeBytes
序列化,这也会先写出大小(如uint32)
将长度说明符len和缓冲区s写入流和 返回对流的引用。
len被序列化为quint32,后跟来自s的len个字节。注意 数据未编码。
您可以使用writeRawData
来规避它:
stream << dataHex<< dataChar;
stream.writeRawData(moreData.data(), moreDate.size());
答案 1 :(得分:3)
00000002是char数组的大小,写入流。
答案 2 :(得分:2)
您缺少的是,QDataStream
不是原始数据。它有自己的简单序列化格式。它最适合于使用QDataStream
编写(序列化)和回读(反序列化)数据,并使用可靠的QIODevice
(QBuffer
或QFile
例子)。
如果要将原始数据添加到QBuffer
,则可以使用write
method的合适重载。但是你也可以直接附加到QByteArray
。