4

根据(在 Qt 5.4 的 QDataStream 中)的文档readBytes(),我希望以下代码将其复制input_array到新分配的内存中并指向raw副本:

QByteArray input_array{"\x01\x02\x03\x04qwertyuiop"};
QDataStream unmarshaller{&input_array, QIODevice::ReadOnly};

char* raw;
uint length;
unmarshaller.readBytes(raw, length);

qDebug() << "raw null? " << (raw == nullptr) << " ; length = " << length << endl;

...但是代码打印raw null? true ; length = 0,表明没有从输入数组中读取任何字节。

为什么是这样?我在误解什么readBytes()

4

1 回答 1

5

文档对此的描述不够清楚,但QDataStream::readBytes希望数据采用某种格式:quint32部分是数据长度,然后是数据本身。

因此,要使用读取数据,QDataStream::readBytes您应该首先QDataStream::writeBytes使用正确的格式写入或以任何其他方式写入。

一个例子:

QByteArray raw_input = "\x01\x02\x03\x04qwertyuiop";

QByteArray ba;

QDataStream writer(&ba, QIODevice::WriteOnly);
writer.writeBytes(raw_input.constData(), raw_input.length());

QDataStream reader(ba);

char* raw;
uint length;
reader.readBytes(raw, length);

qDebug() << "raw null? " << (raw == NULL) << " ; length = " << length << endl;

您还可以使用QDataStream::readRawDataandQDataStream::writeRawData来读取和写入任意数据。

于 2015-04-15T08:44:13.727 回答