fread()在不同的端机器上表现不同吗?

5 c endianness fread

我正在读取bmp文件的标题.我的系统和bmp文件值都是小端格式.所以我读如下:

uint32_t fileSize;
fread(&fileSize,1,4,bmpFile);
Run Code Online (Sandbox Code Playgroud)

在bmp文件中,这些字节按以下顺序排序:... 36 04 01 00 ... fileSize的结果值为66614,即:0x00010436.我得到了正确的值,没有问题.

不过有些事困扰我.这个代码对大端机器的工作方式是否相似,或者fread()的行为方式不同而且我得到错误的0x36040100?

Jab*_*cky 4

fread将数据“按原样”读取到内存中,因此您的代码在大端 CPU 上的行为肯定会与在小端 CPU 上的行为不同。

换句话说,fread不知道您正在阅读uint32_t。众所周知fread,您想要读取 4 个字节到fileSize变量所在的内存位置。