各平台通信数据序列化,是每个语言都会遇到的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;
当然,可以直接序列化,结构体,但需要自己实现,我更喜欢根据类型强转;