Language agnostic BMP文件格式小端和大端之间的矛盾

Language agnostic BMP文件格式小端和大端之间的矛盾,language-agnostic,endianness,bmp,Language Agnostic,Endianness,Bmp,我有两个BMP文件,一个windows屏幕截图和一个使用GIMP的linux生成的文件。 我注意到,标题中的所有数据都以big-endian格式存储 的biWidth、biHeight和biPlanes字段都是大端,而且“BMP文件的大小(以字节为单位)”(位图文件头的第二个字段)是大端,这与上面的说明相矛盾:“所有整数值都以小端格式存储” 我查阅了GIMP的源代码,发现了一个将数据从小端转换为大端的函数: FromL函数用于在位图文件头中写入以字节为单位的文件大小: 所以一切都是大端的,问

我有两个BMP文件,一个windows屏幕截图和一个使用GIMP的linux生成的文件。 我注意到,标题中的所有数据都以big-endian格式存储

biWidth
biHeight
biPlanes
字段都是大端,而且“BMP文件的大小(以字节为单位)”(位图文件头的第二个字段)是大端,这与上面的说明相矛盾:“所有整数值都以小端格式存储”

我查阅了GIMP的源代码,发现了一个将数据从小端转换为大端的函数:

FromL
函数用于在位图文件头中写入以字节为单位的文件大小:

所以一切都是大端的,问题是为什么

为什么要在写的时候转换成大端号,在读的时候转换成小端号,而在读的时候可以简单地用小端号读写数据


我遗漏了什么?

那套程序看起来很像是在写小endian;LSB被写入缓冲区中索引最低的字节…你确定吗?否则为什么所有的字段都会在big endian?我不知道。尽管如此,这套程序还是像小端语一样写作。所以问题一直在我身上。这些文件确实是小尾端,但出于某种原因,我认为它们是大尾端,从那时起,所有的东西都被我交换了。奥利·查尔斯沃思,谢谢你的提醒,你是对的。你可能想为我添加一个答案来接受它?还是我应该投票结束这个问题?我认为结束这个问题是个好主意。我投了close的票,因为这个问题的标题有误导性(因为它是错误的:),而这个问题本身是不相关的。我建议您更改问题的标题以反映您的启示,这样其他人(如我)就不会将其视为搜索结果。