我正在以旧的遗留文件格式(不是我们的)阅读。
很明显,这种文件格式是使用序列化编写的,因此为了让我的生活更轻松,我在阅读时也做了同样的事情。
在读取文件的某个时刻,一个段被识别为QMetaType::QVariantList https://doc.qt.io/qt-5/qmetatype.html.
随后的数据如下:
01 00 00 00 03 00 7e 00 00 00
(所有字节序列均采用小端序)
通过反序列化进入 QVariantList 确认01 00 00 00
将列表中的项目数标识为 1。
进一步深入 QVariant 本身就可以看出我的问题; QVariant 使用 32 位整数无条件读取 QMetaType
So 03 00 7e 00
变成了 8257539 的 QMetaType,这显然是错误的。
看起来,在过去,QVariant 的元类型可能已使用 16 位类型进行序列化,因为这样数据才有意义:
03 00
变为 3 (QMetaType::Uint)
7e 00 00 00
变成126
看看 QVariant 序列化的实现,我无能为力QDataStream::setVersion() https://doc.qt.io/qt-5/qdatastream.html#setVersion要么强制 Qt 将元类型读取为 16 位。
有人对我现在可以做什么有什么建议吗?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)