// 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会单独读取每个struct成员变量(然后以little-endian顺序写入它们)。相反,我期望(1)将整个结构读取为一个连续的块,并开始从该块的末尾开始编写二进制数据(而不是在第一个成员变量的末尾)。
思考?
答案 0 :(得分:5)
如果你是一个小端架构,整个结构不会向后存储;只有整数,指针和其他数值。
因此,当你有一个包含两个WORD
s的结构时,每个WORD
都以little-endian顺序存储,但字段本身不会在内存中切换。当你有一个DWORD
时,这是一个单位,它将以小端存储。