最近有在写关于将内存中的数据写入文件的程序,当程序运行后,却发现文件中的字节数据有些难以理解。思考后发现了其中的道理。
代码如下:
#include<stdio.h>
#include<stdlib.h>
struct BlockInfo {
bool isUsing;
int a;
int b;
};
int main() {
FILE* f = fopen("booltest", "w");
BlockInfo* blockInfo = (BlockInfo*)malloc(sizeof(blockInfo));
blockInfo->isUsing = false;
blockInfo->a = 1;
blockInfo->b = 2;
fwrite(blockInfo, sizeof(BlockInfo), 1, f);
fclose(f);
}
文件内容如下(十六进制):
其中前8位(4B)为char isUsing的数据,中间8位为int a,最后8位为int b。
以中间8位为例,按理说1 应该表示为0x00000001,这里之所以不同是因为这里采用了小端模式,并且是以字节为一个单位分开的,
内存中的形式是
所以就造成了最终形式为文件中的形式。