预备知识:
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
看不懂先收藏,应该用的不多。
Sign in to make a reply
xian_wen
预备知识:
big-endian:字节存储方式为大端在末尾,即顺序存储,第一个字节存储在开头位置,如 01234567,存储为 01 23 45 67
little-endian:字节存储方式为小端在末尾,即逆序存储,第一个字节存储在末尾位置,如 01234567,存储为 67 45 23 01
BMP 文件头结构分析:
BMP 格式采用 little-endian 方式存储数据,文件头结构顺序为:
前 2 个字节用于判断文件类型,b1b2 不变,后面 28 个字节才是具体数据信息,存储顺序按 little-endian 方式逆序存储,因此实际顺序应为:
文中例子分析: