Qt 自定义dat格式文件存储(1)

要想写一个自定义结构体的存储文件,第一步就是创建自己的结构体,但是由于不同系统的存储方式是不一样的,所以我们不能准确的知道自己创建的结构体的大小,那么我们就不能正确读取自己写入dat文件的数据,所以我们需要保证我们创建的结构体的大小是已知且是不变的,这时我们需要用到
#pragma pack() 预编译它的作用是:https://blog.csdn.net/Du_Shuang/article/details/81318094

#include<iostream>

using namespace std;

#pragma pack()
typedef struct pack
{
	char a;
	int b;
	float c;
	double d;
}pack1;
#pragma pack()

int main()
{
	int c = sizeof(pack1);
	cout << c << endl;
	getchar();
	getchar();

}

按理说该结构体的大小应该为1+4+4+8=17,但是实际运行代码结果为:
在这里插入图片描述
是24,这时为什么呢?因为系统为了内存中数据的读取速度,并不是将数据紧密的挨着一起进行存储,具体的存储规则请看上面那篇博客。
假如我们将#pragma pack(1)加在前头,结果又会是怎么样呢?

#include<iostream>

using namespace std;

#pragma pack(1)
typedef struct pack
{
	char a;
	int b;
	float c;
	double d;
}pack1;
#pragma pack()

int main()
{
	int c = sizeof(pack1);
	cout << c << endl;
	getchar();
	getchar();

}

在这里插入图片描述
这会就是17了,所以上面预编译命令的作用是让内存将结构体的数据挨着排列。这样做的好处是我们能够很好的控制内存,但是坏处是降低了结构体读取的速度。

猜你喜欢

转载自blog.csdn.net/Du_Shuang/article/details/82916659