Qt中字节对齐问题和数据的序列化和反序列化的问题
网络传输,最好设置成1字节对齐,这样发送端和接收端,内存的分布和大小都一摸一样的
使用 #pragma pack(1) 设置1字节对齐
反序列化,可以完全用char或char数组来接收,然后再解析成int、float、double或QString
使用memcpy将char数组转int、float、double或QString
#pragma pack(1)
struct haitao{char name[15];quint32 age;float money;double timee;
};struct haitao2{char name[15];char age[4];char money[4];char timee[8];
};
haitao ht;strcpy(ht.name, "xuhaitao");int zhi=458;memcpy(&ht.age,&zhi,4);ht.age=369;ht.money=3.15;ht.timee=2.58;//将ht转成QByteArrayQByteArray byteArray;byteArray.append(reinterpret_cast<const char*>(&ht), sizeof(ht));//再将QByteArray反转成ht2haitao2 ht2;std::memcpy(&ht2, byteArray.data(), sizeof(ht2));//下面解析每一个属性的值QString myname=ht2.name;// 解析age(4字节char数组转int)int ageValue;std::memcpy(&ageValue, ht2.age, 4);// 解析money(4字节char数组转float)float moneyValuexx;std::memcpy(&moneyValuexx, ht2.money, 4);// 解析timee(8字节char数组转double)double moneyValuexx2;std::memcpy(&moneyValuexx2, ht2.timee, 8);
FR:徐海涛(hunkxu)