别看这个文件头和C语言中的头文件读起来很像,但这两个东西其实根本没有一点关系:头文件是一种包含功能函数,数据接口声明的载体文件 而文件头则是直接位于文件中的一段数据,是文件的一部分
大家应该知道,微机中的文件有很多种类型,而相同类型的文件一般还会多多少少有一些不同的地方.文件的类型有EXE,COM,BMP,GIF,WMV,APE,RMVB,FLV,SWF,TXT,CPP,ASM等等,当然有的文件根本就没有文件头,比如说TXT,不信的话可以用UltraEdit打开一个文本文件,除了这个文本文件本身的字符,你不会看到任何其他的数据.不同类型的文件,只要拓展名不同, *** 作系统就可以识别这个文件,并用不同的程序来打开这个文件了,比如JPEG文件,它的拓展名一般式jpg,当双击这种类型的文件时, *** 作系统会自动选择相应的程序来打开这个文件,比如用ACDSee打开.但值得注意的是,相同类型的文件是有不同的地方的,这回拿BMP来举例,大家可以想象一下不同的图片之间最大的不同是什么,有人可能会说是内容,我可以告诉你,你想歪了!不知道大家有没有在看到各种不同大小的图像的时候想过图像浏览软件是怎样识别图像的大小的?这其实就是文件头的功劳!下面给大家演示一下:
先用Windows自带的画图软件创建一个64*64像素的16位纯白袜芹此BMP图像,保存为1.bmp
然后将图像的大小改为128*64,另存告迅为2.bmp
在ACDSee的浏览界面看到如图的两个东西
再用UltraEdit同时打开这两个文件,看看这两个文件的前32个字节:
1.bmp:
00000000h: 42 4D 76 08 00 00 00 00 00 00 76 00 00 00 28 00 BMv.......v...(.
00000010h: 00 00 40 00 00 00 40 00 00 00 01 00 04 00 00 00 ..@...@.........
2.bmp:
00000000h: 42 4D 76 10 00 00 00 00 00 00 76 00 00 00 28 00 BMv.......v...(.
00000010h: 00 00 80 00 00 00 40 00 00 00 01 00 04 00 00 00 ..?..@.........
由于这是十六进制的数据,所以要将原来图像的宽度和高度换成十六进制,以便找到我们想要看到的数据
十进制的128等于十六进制的80,十进制的64等于十六进制的40.这样在第二行好像有我们找的数据
这首租个过程只是为了让大家了解一下文件头,其实这些数据都是有标准的,百度百科的BMP词条就有BMP文件的文件结构
LONG biWidth// 位图的宽度,以像素为单位(18-21字节)
LONG biHeight// 位图的高度,以像素为单位(22-25字节)
18-21字节的数据是80 00 00 00,这是个双字,其实就是80,内存中的数据就是这么放的,这个不是问题
写这么多大家应该对文件头有一点了解了吧?
文件头就是为了描述一个文件的一些重要的属性,它告诉了打开并处理该文件的程序这些属性,比如上面说的BMP的文件头将长宽像素值告诉了ACDSee,ACDSee会根据文件头中的数据以及图像数据的正文把图像显示出来
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)