天天看点

hexdump使用小技巧

本文乃fireaxe原创,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,并注明原作者及原链接。内容可任意使用,但对因使用该内容引起的后果不做任何保证。

作者:[email protected]

博客: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, 整个显示过程都可以自由控制了~~

继续阅读