4

に別のデータを入力する必要があり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"

私は何が欠けていますか?

4

3 に答える 3

13

achar*が追加されると\0、終了を想定してシリアル化しwriteBytes、最初にサイズを書き出します (uint32 として)

writeBytes' ドキュメント:

長さ指定子 len とバッファ s をストリームに書き込み、ストリームへの参照を返します。

len は quint32 としてシリアライズされ、その後に s からの len バイトが続きます。データはエンコードされていないことに注意してください。

あなたはwriteRawDataそれを回避するために使用することができます:

stream << dataHex<< dataChar;
stream.writeRawData(moreData.data(), moreDate.size());
于 2014-04-24T14:02:17.747 に答える