0
点赞
收藏
分享

微信扫一扫

QT 序列化 QDataStream 协议解析


各平台通信数据序列化,是每个语言都会遇到的QT做为一个跨平台语言,对比也做了不错的工作;


QDataStream 看一下API ,会<< ,>> 做了重载,可以格式化原生数据类型,如QString int;


QDataStream::QDataStream(QIODevice * d)
template <typename T>
inline QDataStream & operator<<(QDataStream & s, const QList<T> & l)
template <typename T>
inline QDataStream & operator>>(QDataStream & s, QList<T> & l)

使用样例:

写入:

struct OffSetArray{
double pt1;
double pt2;
double pt3;
double pt4;
double pt5;
double pt6;
};

QByteArray outBlock;

QDataStream sendout(&outBlock,QIODevice::WriteOnly);

int totalBytes = 30;
QString type = "name";

OffSetArray offset;
offset.pt1 =0.1;
offset.pt2 =0.2;
offset.pt3 =0.3;
offset.pt4 =0.4;

QByteArray data;//=offset;
data.append((char*)&offset,sizeof (OffSetArray));

sendout<<totalBytes<<uchar(0) <<type<<data;

// read

int total ;
QString name = "";
QByteArray tmp;

QDataStream inStream(&outBlock, QIODevice::ReadOnly);
inStream>>totalBytes>>name>>tmp;

OffSetArray *pTest = (OffSetArray*)tmp.data();

QString str = QString("%1,%2,%3,%4").arg(pTest->pt1).arg(pTest->pt2).arg(pTest->pt3).arg(pTest->pt4);

qDebug() << "pt --"<<str;

当然,可以直接序列化,结构体,但需要自己实现,我更喜欢根据类型强转;

举报

相关推荐

0 条评论