为什么一个字的字节在二进制文件中顺序相反



我正在十六进制编辑器中阅读BMP文件,同时发现了一些奇怪的东西。两个字母"BM"按顺序书写,但下一个单词(2B)表示文件大小,是十六进制的36 30。实际尺寸为0x3036。我注意到其他数字的存储方式也是一样的。我还使用了MARS MIPS模拟器,它可以通过文字显示内存。字符串in.bmp存储为b . n i / p m

为什么数据不是连续存储的?

这并不取决于数据本身,而是取决于您如何存储这些数据:每字节、每字(通常为2字节)或每长(通常为4字节)。只要你按字节存储数据,你就不会看到任何异常;数据看起来是"连续的"。但是,对于较长的单位,您将受到端序性的影响。

看来你的模拟器是假设所有的字需要有他们的字节颠倒;你可以在你的例子中看到,这个假设并不总是有效的。

对于BM的"魔法"签名:它不是要被读成一个值"BM",而是"首先是一个单字节B,然后是一个单字节M"。所有下一个值都以小端顺序编写,不仅"交换"您的3630,而且"之前"(或"之后")的2个零(BMP头中的较大值为4字节long类型)。

相关内容

  • 没有找到相关文章

最新更新