2011-12-03 45 views
2
// assume file points to a file 

struct myStruct 
{ 
    WORD word; 
    WORD word2; 
}; 

兩個相互競爭的規範:(1)二進制文件解析;這兩個電話有什麼區別?

myStruct a; 
a.word = 0xABCD; 
a.word2 = 0xFADB; 
fwrite(&a, sizeof(myStruct), 1, file); 

output: 
cdab dbfa 

對比:(2)

DWORD word = 0xABCDFADB; 
fwrite(&word, sizeof(DWORD), 1, file); 

output: 
dbfa cdab 

我的問題是:爲什麼不使用fwrite服從書寫結構?我會假設(1)與(2)具有相同的輸出。然而,fwrite單獨讀取每個結構成員變量(然後以little-endian順序編寫它們)。相反,我期望(1)將整個結構作爲一個連續的塊讀取,並開始從該塊末尾開始寫入二進制數據(而不是在第一個成員變量的末尾)。

想法?

+0

有兩件事:(a)這是C,請刪除C++標籤,(b)兩次賦予'a.word'有什麼意義? –

+0

編輯以反映您的建議更改 –

回答

5

如果你是一個小端架構,整個結構不會反向存儲;只有整數,指針和其他數值是。因此,當你有一個包含兩個WORD s的結構時,每個WORD都是按小端順序存儲的,但是這些字段本身並不在內存中切換。當你有一個單一的DWORD,這是一個單位,它將被存儲在小端。