Qt 自定義dat格式檔案儲存(1)
阿新 • • 發佈:2018-12-12
要想寫一個自定義結構體的儲存檔案,第一步就是建立自己的結構體,但是由於不同系統的儲存方式是不一樣的,所以我們不能準確的知道自己建立的結構體的大小,那麼我們就不能正確讀取自己寫入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了,所以上面預編譯命令的作用是讓記憶體將結構體的資料挨著排列。這樣做的好處是我們能夠很好的控制記憶體,但是壞處是降低了結構體讀取的速度。