免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1984 | 回复: 1
打印 上一主题 下一主题

关于如何判断文件是位图文件的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-09 12:17 |只看该作者 |倒序浏览
BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。

其结构定义如下:

typedef struct tagBITMAPFILEHEADER
{
WORD  bfType; // 位图文件的类型,必须为BM
DWORD bfSize; // 位图文件的大小,以字节为单位
WORD bfReserved1; // 位图文件保留字,必须为0
WORD  bfReserved2; // 位图文件保留字,必须为0
DWORD bfOffBits; // 位图数据的起始位置,以相对于位图
// 文件头的偏移量表示,以字节为单位
} BITMAPFILEHEADER;

我使用C++的I/O流库读取一个bmp文件,代码大致如下:
       char strBmpFile[_MAX_PATH];
             cout<<"请输入bmp文件路径"<<endl;
    cin>>strBmpFile;
     BITMAPFILEHEADER BmpFileHead;
    ifstream in(strBmpFile);
    in.read((char*)&BmpFileHead,sizeof(BITMAPFILEHEADER));   
   
   现在我想判断这个文件是否是bmp文件。
我到网上搜了一下,一种做法是你可以打开文件,看其开头的两个字节是否是字符串“BM”,如果是就是Windows位图文件。现在我调试这个程序,发现似乎假如是bmp文件,BITMAPFILEHEADER的成员就是WORD  bfType的值就是19778。我很疑惑,怎么19778这个数字怎么和字符串“BM”联系起来的呢?字母B和字母M的ascii码连起来也不是19778啊?

论坛徽章:
0
2 [报告]
发表于 2007-09-09 12:49 |只看该作者
请教一位大虾,解决了。  
'B'= 0x42, 'M'=0x4d, 0x4d42 = 19778,WORD存放: 低字节,高字节。DWORD存放:低字低字节,低字高字节,高字低字节,高字高字节。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP