C 通过fwrite将int值写入二进制文件
我有下面的示例C代码,可以在Linux操作系统上将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
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 )