我正在阅读bmp文件的标题。我的系统和bmp文件值都是小端格式。所以我读到如下:
uint32_t fileSize;
fread(&fileSize,1,4,bmpFile);
在bmp文件中,这些字节按以下顺序排序:... 36 04 01 00 ... fileSize的结果值是66614,即:0x00010436。 我得到了正确的值,没有问题。
然而有些事困扰我。这个代码对大端机器的工作方式是否相似,或者fread()的行为方式不同而且我得到错误的0x36040100?
答案 0 :(得分:4)
fread
将数据“原样”读入内存,因此您的代码在大端CPU上的行为肯定不同于小端CPU。
换句话说,fread
并不知道您正在阅读uint32_t
。所有fread
都知道您要将4个字节读取到fileSize
变量所在的内存位置。
答案 1 :(得分:1)
fread()
会将36
04
01
00
个字节读取到int32 fileSize
变量。由于您的CPU是小端,实际上从左到右读取字节为00
01
04
36
而是从右到左。因此,当您读取二进制文件时,必须将文件格式endianess转换为系统CPU endianess。