2014-04-24 68 views
3

我必須用不同的數據填充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" 

我在想什麼?

回答

9

char*追加它假定\0終止,並用writeBytes也寫出尺寸的第一(如UINT32)

writeBytes' doc:

寫入長度說明符LEN和緩衝s到的串行化流和 返回對流的引用。

該len被序列化爲quint32,隨後是來自s的len個字節。注意 數據未編碼。

可以使用writeRawData來規避它:

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

00000002是寫入流中的char數組的大小。

2

你所缺少的是,QDataStream原始數據。它有自己簡單的序列化格式。它最適用於數據同時被寫入(序列化)和回讀(反序列化)的使用案例,其中使用可靠的QIODevice(例如QBufferQFile)和QDataStream

如果要將原始數據添加到QBuffer,則可以使用write method的合適超載。但是,你可能會直接追加到QByteArray