最近项目需要进行QT开发环境下对传输对象进行序列化与反序列化处理,对基本类型的处理在使用QT默认的序列化方式还是完全手工序列化这两种方式之间有些犹疑不定,边想了解下QT默认序列化基本类型的格式,项目中只用到了整形和字符串类型,所以只对这两类基本类型进行了简单分析。
分析方式是直接使用QT的方式生成二进制文件,用FlexHEX打开查看分析,生成二进制的代码直接从QT的帮助文档粘贴的,内容如下,稍作修改:
QFile file("file.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
//out << (qint16)42;
//out << (qint8)42;
out << QString("汉");
file.flush();
file.close();
测试结果如下:
输入 |
类型 |
序列化后的二进制文件 |
42 |
qint16 |
00 2A |
42 |
Qint8 |
2A |
汉 |
QString |
00 00 00 02 6C 49 |
结论:
整形的qint8,qint16,qint32分别使用一个、两个、四个字节存放,与内存一致;QString类型的前四个字节表示字符的字节长度,后面为字符的UTF16编码。
http://blog.csdn.net/programmerlizhezhe/article/details/17383339