7B5C727466, .rtf, \lh, .lzh, \MThd, .mid, \0A050108, .pcx, \
25215053, .eps, \2112, .ain, \1A02, .arc, \1A03, .arc, \1A04, .arc, \1A08, .arc, \1A09, .arc, \60EA, .arj, \
41564920, .avi, \425A68, .bz;.bz2, \49536328, .cab, \4C01, .obj, \
303730373037, .tar;.cpio, \4352555348, .cru;.crush, \3ADE68B1, .dcx, \1F8B, .gz;.tar;.tgz, \91334846, .hap, \
3C68746D6C3E, .htm;.html, \3C48544D4C3E, .htm;.html, \3C21444F4354, .htm;.html, \
100, .ico, \
5F27A889, .jar, \2D6C68352D, .lha, \
20006040600, .wk1;.wks, \00001A0007800100, .fm3, \00001A0000100400, .wk3, \20006800200, .fmt, \00001A0002100400, .wk4, \5B7665725D, .ami, \
300000041505052, .adx, \1A0000030000, .nsf;.ntf, \4D47582069747064, .ds4, \4D534346, .cab, \4D546864, .mid, \000001B3, .mpg;.mpeg, \
0902060000001000B9045C00, .xls, \0904060000001000F6055C00, .xls, \7FFE340A, .doc, \1234567890FF, .doc, \
31BE000000AB0000, .doc, \1A00000300001100, .nsf, \7E424B00, .psp, \504B0304, .zip, \89504E470D0A, .png, \
6D646174, .mov, \6D646174, .qt, \52617221, .rar, \2E7261FD, .ra;.ram, \EDABEEDB, .rpm, \2E736E64, .au, \53495421, .sit, \53747566664974, .sit, \1F9D, .z, \49492A, .tif;.tiff, \4D4D2A, .tif;.tiff, \554641, .ufa, \57415645666D74, .wav, \D7CDC69A, .wmf, \
4C000000, .lnk, \504B3030504B0304, .zip, \FF575047, .wpg, \FF575043, .wp, \3C3F786D6C, .xml, \
FFFE3C0052004F004F0054005300540055004200, .xml, \3C21454E54495459, .dtd, \5A4F4F20, .zoo, \
通过文件头标识判断图片格式
最近在做东西的时候遇到了点问题,在加载图片的时候,加载失败,后缀
都是jpg格式,但换个图片就可以了,为此,怀疑图片格式有问题,遂拖到UE里面查看它的16进制,果然,两个图片的文件头根本就不一样,这不是欺负人嘛,害我白白浪费了半天的时间,差点要重新编译内核。
然后到网上找了一些资料,查看不同格式图片的文件头是怎样的。下面转帖是不同图片的文件头标志:
图片的格式很多,一个图片文件的后缀名并不能说明这个图片的真正格式什么,那么如何获取图片的格式呢?我想到了几个简单但有效的方法,那就是读取图片文件的文件头标识。我们知道各种格式的图片的文件头标识识不同的,因此我们可以通过判断文件头的标识来识别图片格式。
我对各种格式的图片文件头标识进行了分析,不仅查找资料,也用十六进制编辑器察看过图片的文件头,以下是我收集、分析的结果,供大家参考。 1.JPEG/JPG
- 文件头标识 (2 bytes): $ff, $d8 (SOI) (JPEG 文件标识) - 文件结束标识 (2 bytes): $ff, $d9 (EOI) 2.TGA
- 未压缩的前5字节 00 00 02 00 00 - RLE压缩的前5字节 00 00 10 00 00 3.PNG
- 文件头标识 (8 bytes) 89 50 4E 47 0D 0A1A0A 4.GIF
- 文件头标识 (6 bytes) 47 49 46 38 39(37) 61 G I F 8 9 (7) a 5.BMP
- 文件头标识 (2 bytes) 42 4D
B M 6.PCX
- 文件头标识 (1 bytes) 0A 7.TIFF
- 文件头标识 (2 bytes) 4D 4D 或 49 49 8.ICO
- 文件头标识 (8 bytes) 00 00 01 00 01 00 20 20 9.CUR
- 文件头标识 (8 bytes) 00 00 02 00 01 00 20 20 10.IFF
- 文件头标识 (4 bytes) 46 4F 52 4D F O R M 11.ANI
- 文件头标识 (4 bytes) 52 49 46 46 12、Word/Excel (xls.or.doc)
文件头标识 D0CF11E0 D0CF11E0A1B11AE1
文件结束标识 0100FEFF030A0000 R I F F
根据这些文件头标识的收集,我可以写一个识别图像格式的模块了。但是在写这个模块之前可以对收集到的文件头标识进行优化,使得程序中字符串比对次数尽量的少。
1.JPEG我们知需要比对文件头的$ff, $d8这两个字符,而不用读取最后的两个结束标识了。
2.TGA,ICO,CUR只需比对第三个与第五个字符即可。 3.PNG比对[89][50]这两个字符。 4.GIF比对[47][49][46]与第五个字符。
废话不多说了,利用内存流来判断文件的格式,其实判断文件的前几个字节就可以简单的判断这个文件是什么类型的文件,例如
jpg文件 是 FFD8 (从低位到高位就要反过来 D8FF 下面都是一样) BMP文件 是 424D ---4D42
其他的我就不一一列举了,想知道跟多文件类型分别是用什么字符作为文件的开头的话,下载个C32asm或者UE等这类16进制编辑器就可以看到了
什么头都没有直接数据的就是ANSI类型,EF BB BF头的就是UTF-8类型,FF FE头的就是UNICODE类型的,FE FF头的就是UNICODE BIG ENDIAN类型的,然后根据类型确定用什么类型的变量保存内容
求助怎么能在winhex中添加新的文件头搜索项
选择按类型恢复,弹出对话框后点击signatures按钮,这时,winhex就会调用excel打开这个winhex安装目录下的File Type Signatures Search这个文件。然后在Description下输入描述比如“图片”,Extensions下输入扩展名,多个扩展名可以以分号隔开。heard下输入文件头的标志,以右斜杠隔开,并一小写x开头(表示十六进制)。逐个输入标志字节,比如图片则输入:\\xFF\\xD8\\。假设图片的标志字节在第四个字节,那么在offset下输入4。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库所有类型文件的文件头标志(2)在线全文阅读。
相关推荐: