通過二進位制頭識別檔案型別
1.JPEG/JPG
- 檔案頭標識 (2 bytes): $ff, $d8 (SOI) (JPEG檔案標識)
- 檔案結束標識 (2 bytes): $ff, $d9 (EOI)
2.TGA
- 未壓縮的前5位元組 00 00 02 0000
- RLE壓縮的前5位元組 00 00 10 0000
3.PNG
- 檔案頭標識 (8 bytes) 89 50 4E 470D 0A 1A 0A
4.GIF
- 檔案頭標識 (6 bytes) 47 49 46 3839(37) 61
G I F 8 9 (7) a
5.BMP
- 檔案頭標識 (2 bytes) 424D
B M
6.PCX
- 檔案頭標識 (1 bytes) 0A
7.TIFF
- 檔案頭標識 (2 bytes) 4D 4D 或 4949
8.ICO
- 檔案頭標識 (8 bytes) 00 00 01 0001 00 20 20
9.CUR
- 檔案頭標識 (8 bytes) 00 00 02 0001 00 20 20
10.IFF
- 檔案頭標識 (4 bytes) 46 4F 524D
F O R M
11.ANI
- 檔案頭標識 (4 bytes) 52 49 4646
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進位制編輯器就可以看到了。
原文連結:http://zjf30366.blog.163.com/blog/static/41116458201042194542973/
附:常見檔案的檔案頭標識
255044PDF
526563 EML
D0CF11 PPT
4D5AEE COM
E93B03 COM
4D5A90 EXE
424D3E BMP
49492A TIF
384250 PSD
C5D0D3 EPS
0A0501 PCS
89504E PNG
060500 RAW
000002 TGA
60EA27 ARJ
526172 RAR
504B03 ZIP
495363 CAB
1F9D8C Z
524946 WAV
435753 SWF
3026B2 WMV
3026B2 WMA
2E524D RM
00000F MOV
000077 MOV
000001 MPA
FFFB50 MP3
234558 m3u
3C2144 HTM
FFFE3C XSL
3C3F78 XML
3C3F78 MSC
4C0000 LNK
495453 CHM
805343 scm
D0CF11 XLS
31BE00 WRI
00FFFF MDF
4D4544 MDS
5B436C CCD
00FFFF IMG
FFFFFF SUB
17A150 PCB
2A5052 ECO
526563 PPC
000100 DDB
42494C LDB
2A7665 SCH
2A2420 LIB
434841 FNT
7B5C72 RTF
7B5072 GTD
234445 PRG
000007 PJT
202020 BAS
000002 TAG
4D5A90 dll
4D5A90 OCX
4D5A50 DPL
3F5F03 HLP
4D5A90 OLB
4D5A90 IMM
4D5A90 IME
3F5F03 LHP
C22020 NLS
5B5769 CPX
4D5A16 DRV
5B4144 PBK
24536F PLL
4E4553 NES
87F53E GBC
00FFFF SMD
584245 XBE
005001 XMV
000100 TTF
484802 PDG
000100 TST
414331 dwg
D0CF11 max
另外還有一些重要的檔案,沒有固定的檔案頭,如下:
TXT 沒固定檔案頭定義
TMP 沒固定檔案頭定義
INI 沒固定檔案頭定義
BIN 沒固定檔案頭定義
DBF 沒固定檔案頭定義
C 沒沒固定檔案頭定義
CPP 沒固定檔案頭定義
H 沒固定檔案頭定義
BAT 沒固定檔案頭定義
還有一些不同的檔案有相同的檔案頭,最典型的就是下面:
4D5A90 EXE
4D5A90 dll
4D5A90 OCX
4D5A90 OLB
4D5A90 IMM
4D5A90 IME
參考:http://blog.sina.com.cn/s/blog_6bfe46bc0100q1bx.html
相關文章
- 文字檔案與二進位制檔案的區別
- java通過檔案頭內容判斷檔案型別Java型別
- IOS UTI統一型別識別符號:判斷檔案型別通過字尾iOS型別符號
- java之二進位制與資料型別Java資料型別
- 二進位制安全_C語言中資料型別C語言資料型別
- 各種型別檔案頭型別
- 通過OpenSSL來生成二進位制格式證書檔案(pfx和cer)
- 二進位制檔案複製
- php寫二進位制檔案PHP
- 二進位制檔案拷貝
- C語言02-常量、二進位制、資料型別C語言資料型別
- 二進位制檔案視覺化(二)視覺化
- 通過Nvidia簽名的二進位制檔案執行系統命令
- 檔案操作(二進位制拷貝)
- Git處理二進位制檔案Git
- MySQL二進位制檔案(binlog)MySql
- Hibernate、JAVA、SQL對應二進位制、文字、影像物件型別JavaSQL物件型別
- .NET Core Web API使用HttpClient提交檔案的二進位制流(multipart/form-data內容型別)WebAPIHTTPclientORM型別
- 根據副檔名識別檔案型別(轉)型別
- mssql sqlserver 可以儲存二進位制資料的欄位型別詳解SQLServer型別
- Python讀寫二進位制檔案Python
- Java二進位制Class檔案格式解析Java
- c++ 二進位制儲存檔案C++
- C#的二進位制檔案操作C#
- 使用UltraEdit 拷貝二進位制檔案
- 透過禁止比較讓 Go 二進位制檔案變小Go
- 不知jdon有沒有研究過二進位制class檔案的
- BLOB(二進位制大物件:text、ntext或image)型別資料的操作物件型別
- MySQL 匯出匯入二進位制檔案MySql
- UltraEdit--二進位制檔案編輯功能
- 用shell處理二進位制檔案(轉)
- UE複製貼上二進位制檔案
- 二進位制檔案記憶體對映記憶體
- 淺談從原始碼檔案到二進位制可執行檔案的過程原始碼
- 二進位制與二進位制運算
- java有沒有函式,可是判斷檔案是不是2進位制型別,如圖片?Java函式型別
- 二進位制檔案安裝安裝etcd
- 6.3建立自己執行的二進位制檔案