【问题标题】:Why bytes of one word has opposite order in binary files?为什么二进制文件中一个单词的字节顺序相反?
【发布时间】:2014-05-10 17:07:12
【问题描述】:

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

为什么不连续存储数据?

【问题讨论】:

    标签: binary-data bmp


    【解决方案1】:

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

    您的模拟器似乎假设所有单词都需要颠倒它们的字节;你可以在你的例子中看到这个假设并不总是有效的。

    至于BM“magic”签名:它的意思不是读作 word 值“BM”,而是读作“首先,单个字节 B,然后是单字节M"。所有下一个值都写入little-endian order,不仅“交换”您的3630,还“交换”两个零“之前”(或“之后”)(BMP header 中较大的值是 4 个字节long 类型)。

    【讨论】:

      猜你喜欢
      • 2015-02-17
      • 2020-10-22
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多