2014-06-25 158 views
0

當我將一個結構體寫入文件時,內存如何在文件中設置?比如這個結構與功能:將結構體寫入文件

struct vector3D 
{ 
    public: 
     float x, y, z; 

    vector3D(float modelX, float modelY, float modelZ) 
    { 
     x = modelX; 
     y = modelY; 
     z = modelZ; 
    } 

    vector3D() 
    { 
     x = 0; 
     y = 0; 
     z = 0; 
    } 
} 


inline void writeVector3D(vector3D vec, FILE *f) 
{ 
    fwrite((void*)(&vec), sizeof(vector3D), 1, f); 
} 

而這種代碼主要:

vector3D vec(1, 2, 3); 
writeVector3D(vec, file); 

怎樣的信息文件中設置?它是否像123? 或者struct有不同的設置?

+1

這寫出二進制表示。執行二進制輸出的缺點是如何處理對數據結構的更改(與讀取/寫入文本(如XML或JSON)相比)。 – crashmstr

回答

1

它把它寫成一個連續的二進制流。

該文件的大小將爲struct的大小。

在你的情況下,這將寫出總共12個字節(每浮子4個字節),並且它的結構將是這樣的:

  • 第一個4個字節將代表浮子1
  • 二4字節將代表浮動2
  • 第三4個字節將代表浮筒3
2

你可能需要閱讀:

  • 數據結構排列(http://en.wikipedia.org/wiki/Data_structure_alignment) - 的信息,有關如何結構成員被佈置在存儲器
  • 字節序(Endianness) - 的信息,有關如何單可變存儲器佈置在存儲器
  • 浮點表示(可以」添加第三個鏈接) - 因爲浮點變量比整數變量更「奇怪」。

數據的寫入順序與內存中的順序相同,包括對齊間隔。

0

您需要預處理程序#pragma pack(1)以字節對齊結構,否則其對齊取決於處理器體系結構(32位或64位)。同時檢查這#pragma pack effect