关于BMP文件头数据解读的疑问
发布网友
发布时间:2022-05-06 16:25
我来回答
共1个回答
热心网友
时间:2023-10-11 20:53
这是位图文件头结构体:
typedef struct bmp_header
{
unsigned short bfType; //文件的类型,该值必需是0x4D42,也就是字符'BM'
unsigned int bfSize; //说明文件的大小,用字节为单位
unsigned short bfReserved1; //保留,必须设置为0
unsigned short bfReserved2; //保留,必须设置为0
unsigned int bfOffBits; //说明从文件头开始到实际的图象数据之间的字节的偏移量
}BMPHEADER;
由于存放文件大小的变量bfSize为int型,即4个字节(32位和64位机器都是),然后你列出来的文件数据是从低地址到高地址的,而数据的存储当然是高位的存在高地址,低位的存在低地址,即4690 0000应该倒过来读,为0000 9046,也就是36934字节。
至于你说的后面的“H”,我不晓得你说的是哪里的“H”。追问那为什么0x4D42就没倒过来呢?
赋值的时候还是:
BMPHEADER head;
head.bftype=0x4D42; 呢?
追答怎么会没倒过来呢?你再仔细看看!赋值的时候是0x4D42(4D是高字节,42是低字节),而你读出来的是424D(42是低地址,4D是高地址),低地址存储低字节,高地址存储高字节。
热心网友
时间:2023-10-11 20:53
这是位图文件头结构体:
typedef struct bmp_header
{
unsigned short bfType; //文件的类型,该值必需是0x4D42,也就是字符'BM'
unsigned int bfSize; //说明文件的大小,用字节为单位
unsigned short bfReserved1; //保留,必须设置为0
unsigned short bfReserved2; //保留,必须设置为0
unsigned int bfOffBits; //说明从文件头开始到实际的图象数据之间的字节的偏移量
}BMPHEADER;
由于存放文件大小的变量bfSize为int型,即4个字节(32位和64位机器都是),然后你列出来的文件数据是从低地址到高地址的,而数据的存储当然是高位的存在高地址,低位的存在低地址,即4690 0000应该倒过来读,为0000 9046,也就是36934字节。
至于你说的后面的“H”,我不晓得你说的是哪里的“H”。追问那为什么0x4D42就没倒过来呢?
赋值的时候还是:
BMPHEADER head;
head.bftype=0x4D42; 呢?
追答怎么会没倒过来呢?你再仔细看看!赋值的时候是0x4D42(4D是高字节,42是低字节),而你读出来的是424D(42是低地址,4D是高地址),低地址存储低字节,高地址存储高字节。