本文乃fireaxe原創,使用GPL釋出,可以自由拷貝,轉載。但轉載請保持文檔的完整性,并注明原作者及原連結。内容可任意使用,但對因使用該内容引起的後果不做任何保證。
部落格:fireaxe.blog.chinaunix.net
開發時經常會需檢視非文本檔案内容,最常見的16進制檢視器就是hexdump。hexdump 看似簡單,但還是有些小技巧的。
以文本檔案tmpfile為例:
點選(此處)折疊或打開
Happy New Year!
1) 最簡單的方式
hexdump testfile
0000000 6148 7070 2079 654e 2077 6559 7261 0a21
*
0000030
這種方式是以兩個位元組為一組,其順序取決于本機位元組序。比如在x86架構上就是以blittle-endian方式顯示,看起來會很費勁。
如第一行翻譯成ascii碼:
6148 7070 2079 654e 2077 6559 7261 0a21
aH pp y Ne w e ae !r
為了避免這種情況,就要用到下面的”以位元組方式檢視“
2) 以位元組方式檢視
hexdump -C testfile -s skip -n number
00000000 48 61 70 70 79 20 4e 65 77 20 59 65 61 72 21 0a |Happy New Year!.|
這種方式就不會有位元組序問題了,而且還能同時顯示16進制與ascii碼,但存在的問題是,如果某幾行的内容相同,會省略掉後幾行,這個有時也會造成麻煩。如何避免省略呢?
3) 不要省略
hexdump -v testfile
0000010 6148 7070 2079 654e 2077 6559 7261 0a21
0000020 6148 7070 2079 654e 2077 6559 7261 0a21
現在省略是沒有了,但又回到了兩位元組顯示的老路上,是以我們要把兩種方式結合起來。
4) 位元組方式顯示且不要省略
hexdump -Cv testfile
00000010 48 61 70 70 79 20 4e 65 77 20 59 65 61 72 21 0a |Happy New Year!.|
00000020 48 61 70 70 79 20 4e 65 77 20 59 65 61 72 21 0a |Happy New Year!.|
現在就好看多了,既是以單位元組方式顯示,又不會省略了。但有時檔案很大,我們隻想檢視其中一段,怎麼把呢?
5) 顯示某一段
hexdump -Cv testfile -s skip -n number
fireaxe $ hexdump -Cv tmp.txt -n 1
00000000 48 |H|
00000001
fireaxe $ hexdump -Cv tmp.txt -n 2
00000000 48 61 |Ha|
00000002
fireaxe $ hexdump -Cv tmp.txt -n 3
00000000 48 61 70 |Hap|
00000003
fireaxe $ hexdump -Cv tmp.txt -s 1 -n 1
00000001 61 |a|
fireaxe $ hexdump -Cv tmp.txt -s 2 -n 1
00000002 70 |p|
fireaxe $ hexdump-Cv tmp.txt -s 3 -n 1
00000003 70 |p|
00000004
OK, 整個顯示過程都可以自由控制了~~