关于二进制文件格式遇到的一些问题

//测试在一个整数的中间字节插入另一个整数会怎么样
#include
#include

int main(void)
{
FILE * file;
int a = 1;
int b = 2;
int c;

if ( ( file = fopen ( "bionary_test.txt","wb+") ) == NULL )
{
    fprintf(stderr,"Open file failed.");
    exit(1);
} 

fwrite(&a,sizeof(int),1,file);
rewind(file);  //指针一定要重置,不然是接着继续的
fread(&c,sizeof(int),1,file);  //只能用二进制读取,不能用fscanf(),不知为何,会输出43
printf("%d\n%d\n",c,sizeof (int));

fseek(file,2L,SEEK_SET);
fwrite(&a,sizeof(int),1,file);
rewind(file);
fread(&c,sizeof(int),1,file);
printf("%d\n",c);
fread(&c,sizeof(int),1,file);
printf("%d\n",c);
fseek(file,0L,SEEK_END);
c =ftell(file);
printf("%d\n",c);

return 0;

}

输出结果:
1
4
65537
65536
6

原本里面的数字是1,占用4个字节,应该前31位都为0,最后一位是1,我在第二个字节后面插入了数字2,结果现在里面有6个字节而不是8个字节,说明是从第二个字节开始覆盖住了后面的4个字节而不是添加了4个字节,但是即使这样,前4个字节也应该都是0,结果却输出了65537。

除此之外我又读了4个字节,但是里面只剩下2个字节了,但是却读取成功了,输出结果65536。请问是为什么

另外我如果用fscanf从文件中读取数字的话会读出43,也不知道是为什么

希望大家能为我解决疑惑

x86/x64架构都是采用小端的,即低地址端存的是低有效位字节,高地址端存的是高有效位字节。
整型值1,占4个字节,二进制是0x000001,但按小端存储的话, 字节顺序是0x01, 0x00, 0x00, 0x00
第一次fwrite写入1后,文件内容是0x01 0x00 0x00 0x00
第二次fwrite从偏移2的位置写入1后,文件内容变成0x01 0x00 0x01 0x00 0x00 0x00
fread从文件开始读入整型,得到整型值是0x00010001,即65537
然后再用freed继续读一个整型,由于当前文件指针位置距离文件结尾只有2个字节,读入整型(4个字节)时遇到文件结尾,因此整体没有读取成功。你应该判断一下freed的返回值,此处应该返回0,因为没有成功读入整型。
https://en.wikipedia.org/wiki/Endianness