1. 程式人生 > >Qt 自定義dat格式檔案儲存(1)

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了,所以上面預編譯命令的作用是讓記憶體將結構體的資料挨著排列。這樣做的好處是我們能夠很好的控制記憶體,但是壞處是降低了結構體讀取的速度。