如何移植(de)序列化qint32?

Res*_*ion 1 c++ serialization qt

Qt的文档指出,它qint32是一个typedef,signed int并且在Qt支持的所有平台上都保证是32位的.[文档]

表明signed int不得小于short且必须至少为16位.因此,不能单独确定typedef的大小.Qt 似乎绕过了.

因此,对于使用Qt的(de)序列化,这很好,因为大小总是如此.然而,这并没有说明我所假设的那些数字的二进制表示.当(de)可移植地序列化时,这很重要.例如,这样做:

QFile file("somefile");
file.open(QIODevice::WriteOnly);
qint32 i = 10;
file.write(reinterpret_cast<const char*>(&i), sizeof(i));
file.flush();
file.close();
Run Code Online (Sandbox Code Playgroud)

将以qint32二进制形式将值10 写入文件.当我通过网络将该文件发送到用Qt编写的另一个应用程序时:

QFile file("somefile");
file.open(QIODevice::ReadOnly);
qint32 i = 0;
file.read(reinterpret_cast<char*>(&i), sizeof(i));
file.close();
Run Code Online (Sandbox Code Playgroud)

我确实会收到一个号码,但保证总是10吗?我不这么认为,因为该机器上的10的二进制表示可能会有所不同.但我有可能理解它是错误的,这是一个非问题(至少对于Qt支持的平台).

因此我的问题:如何在Qt中移植(de)序列化原始类型?或者尺寸保证足够吗?

G.M*_*.M. 8

您可以使用QDataStream进行(反)序列化.它从QIODevice继承并且具有qint32的显式输入和输出运算符的任何内容写入/读取.