C 通过fwrite将int值写入二进制文件

C 通过fwrite将int值写入二进制文件,c,linux,binaryfiles,fwrite,C,Linux,Binaryfiles,Fwrite,我有下面的示例C代码,可以在Linux操作系统上将int和char array写入文件 int main(void){ struct eg{ int x; char y[3]; }; struct eg example_array[5] = {{ 0, {0}}}; int i; for(i=0;i<3;i++){ example_array[i].x = i; strcpy(exa

我有下面的示例C代码,可以在Linux操作系统上将
int
char array
写入文件

int main(void){
    struct eg{
        int x;
        char y[3];
    };

    struct eg example_array[5] = {{ 0, {0}}};

    int i;
    for(i=0;i<3;i++){
        example_array[i].x = i;
        strcpy(example_array[i].y,"12");
    }

    FILE *fp;
    fp = fopen("/home/ubuntu/example", "wb");
    fwrite(&example_array, sizeof(struct eg), 5, fp);
    fclose(fp);

return 0;
}
我没有看到二进制文件中的
示例\u数组[I].x
值。有人能告诉我如何在上面的代码中使用
fwrite


那么
^@^^@^^@
代表什么呢?它们是空白吗

^X
使用不可打印的ASCII值对字节进行编码
^@
表示
0
^A
表示
1
^B
表示
2
,依此类推

   int   ch[] padding
-------- ---- -------
^@^@^@^@ 12^@   ^@
^A^@^@^@ 12^@   ^@
^B^@^@^@ 12^@   ^@
^@^@^@^@ ^@^@   ^@
^@^@^@^@ ^@^@   ^@
^@^@

您的计算机存储以最低有效字节开始的数据。前四列表示您的
int
;接下来的三个是
char[3]
。最后,
结构之间有一个1字节的填充。

每个
^@
表示一个二进制0x00,例如
^a
表示0x01,
^B
表示0x02等等。看看你发布的十六进制转储。由于在您的平台上sizeof(int)是4,因此对于每个
示例_数组[i].x
,您将找到四个字节,后面是三个包含字符串
y
的字节。您将看到,第一个
x
写为
00
,第二个
x
写为
01 00
,这正是整数在系统中的存储方式。如果您想将值写入字符串,例如,要有一个独立于平台的输出文件,您可以使用

fprintf( fp, "%d %s ", example_array[i].x, example_array[i].y )

你在什么建筑上?您知道x86是little endian,对吗?是的,我在x86上,但我将在armv4l体系结构上编译代码
fprintf( fp, "%d %s ", example_array[i].x, example_array[i].y )