我们可以借助QDataStream类来实现反序列化,不确定长度的字段使用readRawData接口从流中读取数据。示例代码如下:
#include <QDataStream>
struct TEST
{
uint16_t e;
char* d;
int f;
//反序列化
friend QDataStream &operator>>(QDataStream& output,TEST& data)
{
output >> data.e;
const int NAME_LENGTH = 4;
data.d = new char[NAME_LENGTH + 1];
memset(data.d, 0, NAME_LENGTH + 1);
output.readRawData(data.d, NAME_LENGTH);
output >> data.f;
qDebug() << data.e << data.d << data.f;
return output;
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QByteArray b;
b.append(0x12);
b.append(0x34);
b.append("abcd");
b.append(0x01);
b.append(0x01);
b.append(0x01);
b.append(0x01);
QDataStream stream(b);
TEST test = {0};
stream >> test;
MainWindow w;
w.show();
return a.exec();
}