【问题标题】:Append a QByteArray to QDataStream?将 QByteArray 附加到 QDataStream?
【发布时间】:2014-06-09 20:44:16
【问题描述】:

我必须用不同的数据填充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"

我错过了什么?

【问题讨论】:

    标签: c++ qt qbytearray qdatastream


    【解决方案1】:

    您缺少的是,QDataStream不是原始数据。它有自己的简单序列化格式。它最适合使用QDataStream 写入(序列化)和回读(反序列化)数据以及使用可靠的QIODevice(例如QBufferQFile)的用例。

    如果您想将原始数据添加到QBuffer,您可以使用write method 的合适重载。但是你也可以直接附加到QByteArray

    【讨论】:

      【解决方案2】:

      当附加了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 数组的大小,写入流中。

        【讨论】:

          猜你喜欢
          • 2020-04-25
          • 2020-07-10
          • 1970-01-01
          • 2019-05-26
          • 2020-08-15
          • 1970-01-01
          • 2015-08-20
          • 2023-03-08
          • 1970-01-01
          相关资源
          最近更新 更多