如何使用 QDataStream::readBytes()
How to use QDataStream::readBytes()
根据 the documentation for readBytes()
(在 Qt 5.4 的 QDataStream 中),我希望以下代码将 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()
有什么误解?
文档对此描述不够清楚,但 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::readRawData
和QDataStream::writeRawData
来读写任意数据。
根据 the documentation for readBytes()
(在 Qt 5.4 的 QDataStream 中),我希望以下代码将 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()
有什么误解?
文档对此描述不够清楚,但 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::readRawData
和QDataStream::writeRawData
来读写任意数据。