Discuss / Python / BMP 文件头结构分析

BMP 文件头结构分析

Topic source

xian_wen

#1 Created at ... [Delete] [Delete and Lock User]

预备知识:

  • big-endian:字节存储方式为大端在末尾,即顺序存储,第一个字节存储在开头位置,如 01234567,存储为 01 23 45 67

  • little-endian:字节存储方式为小端在末尾,即逆序存储,第一个字节存储在末尾位置,如 01234567,存储为 67 45 23 01

BMP 文件头结构分析:

BMP 格式采用 little-endian 方式存储数据,文件头结构顺序为:

b1b2 b1b2b3b4 b1b2b3b4 b1b2b3b4 b1b2b3b4 b1b2b3b4 b1b2b3b4 b1b2 b1b2

前 2 个字节用于判断文件类型,b1b2 不变,后面 28 个字节才是具体数据信息,存储顺序按 little-endian 方式逆序存储,因此实际顺序应为:

b1b2 b4b3b2b1 b4b3b2b1 b4b3b2b1 b4b3b2b1 b4b3b2b1 b4b3b2b1 b2b1 b2b1

文中例子分析:

存储顺序:
\x42\x4d \x38\x8c\x0a\x00 \x00\x00\x00\x00 \x36\x00\x00\x00 \x28\x00\x00\x00 \x80\x02\x00\x00 \x68\x01\x00\x00\ x01\x00 \x18\x00

实际顺序:
\x42\x4d \x00\x0a\x8c\x38 \x00\x00\x00\x00 \x00\x00\x00\x36 \x00\x00\x00\x28 \x00\x00\x02\x80 \x00\x00\x01\x68 \x00\x01 \x00\x18

十六进制转十进制:
0x42 = 66 (B 的 ascii 为 66)
0x4d = 77 (M 的 ascii 为 77)
0x000a8c38 = 691256
0x00000000 = 0
0x00000036 = 54
0x00000028 = 40
0x00000280 = 640
0x00000168 = 360
0x0001 = 1
0x0018 = 24

看不懂先收藏,应该用的不多。


  • 1

Reply