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

时间:2014-05-10 17:07:12

标签: binary-data bmp

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

为什么数据不会连续存储?

1 个答案:

答案 0 :(得分:2)

它不取决于数据本身,而取决于存储这些数据的方式:每个字节,每个字(通常为2个字节)或每个长度(通常为4个字节)。只要您按字节存储数据,就不会发现任何异常;数据出现"连续"。但是,如果单位较长,则需要endianness

看来您的模拟器假设所有单词都需要反转字节;你可以在你的例子中看到这个假设并不总是有效。

至于BM"魔法"签名:它不应被视为 word 值" BM",而是"首先,单个字节B,然后单个字节M"。所有下一个值都写在little-endian order中,而不仅仅是交换'您的3630以及之前的2个零' (或'在'之后)(BMP header中较大的值为4字节long类型)。