使用xxd查看文件的二进制码

使用xxd查看文件的二进制码

xxd简介

xxd命令可用于查看文件的二进制或十六进制码,电脑中的文件本质上当然都是以二进制方式保存的,但是我们查看的时候一般以16进制方式查看,因为24=16,每8位二进制(28=256)可表示两位十六进制数(0xFF,F即16,所以16×16=256),即八位二进制和两位十六进制都可表示0-255共256个数(即一个字节)。所以,由于二进制太长,通常都用十六进制来表示二进制数,这样8位可缩短为两位,在查看的时候就方便很多。

以下这段内容copy自man xxd,为了方便测试,请把它保存为test.txt文件

xxd creates a hex dump of a given file or standard input. It can also convert a hex dump back to its original binary form. Like uuencode(1) and uude-code(1) it allows the transmission of binary data in a `mail-safe' ASCII representation, but has the advantage of decoding to standard output. Moreover,it can be used to perform binary file patching.

查看文件的十六进制码

直接查看,默认是16进制的

xxd /path/to/test.txt

查看文件的二进制码

加个-b即可查看文件的二进制码,-b是binary(二进制)的意思

xxd -b /path/to/test.txt

设置显示字节数

前面我们都是直接查看,没有设置显示长度,那是因为我们的测试文件test.txt非常小,如果大点的文件你直接像前面那样显示,它会一直往终端上输出,一直往上滚动,根本看不了的,所以我们需要指定一个显示长度。

-l表示length,用于设置每次显示的字节数,-l 0x30就表示显示0x30个字节(下面有解释)

xdd -l 0x30 /path/to/test.txt

输出如下

00000000: 7878 6420 6372 6561 7465 7320 6120 6865  xxd creates a he
00000010: 7820 6475 6d70 206f 6620 6120 6769 7665  x dump of a give
00000020: 6e20 6669 6c65 206f 7220 7374 616e 6461  n file or standa

注意

  • 0x30是十六进制数(0x开头都是十六进制),0x30转成十进制就是48,所以0x30意思是显示48个字节;
  • xxd默认每行显示16个字节:中间8列每列2个字节(因为十六进制数两位就可以显示1个字节),8列共16个字节,第一列和最后一列是辅助显示用的,不是真正的数据;
  • 这样的话,因为每行是16个字节,所以48个字节就刚好显示成3行(48/16=3)。

设置每行显示字节数

xxd默认每行显示16个字节,但是使用-c也可以设置成你想要的其它字节数。-c意思是column,即“列”的意思,但是这个列是以一个字节(两位十六进制数)为一列的,所以我们看到的“一列”,对-c来说其实是“两列”,所以其实这个-c指定的列数,就是字节数。

比如我想一行显示6个字节,那就是-c 6

xxd -c 6 /path/to/test.txt

我们在前面的基础上再指定一下长度,每行显示6个字节(-c 6),共显示18个字节(-l 18)

xxd -c 6 -l 18 /path/to/test.txt

输出如下,刚好也是3行(18/6=3)

00000000: 7878 6420 6372  xxd cr
00000006: 6561 7465 7320  eates
0000000c: 6120 6865 7820  a hex

跳过n行

前面设置显示字节数可以限制显示的行数,但那都是从开头开始显示的,能不能从指定位置开始显示呢?肯定是可以的!

-s表示seek(寻找,即从哪里开始),-s 0x30表示从0x30开始寻找(含0x30那行)

xdd -s 0x30 /path/to/test.txt

我们在前面的基础上再加上显示长度(跳过了前面3行,再显示3行)

xxd -s 0x30 -l 0x30 /path/to/test.txt

输出如下

00000030: 7264 2069 6e70 7574 2e20 4974 2063 616e  rd input. It can
00000040: 2061 6c73 6f20 636f 6e76 6572 7420 6120   also convert a
00000050: 6865 7820 6475 6d70 2062 6163 6b20 746f  hex dump back to

连续输出十六进制

前面所有的命令,都是每4位隔一个空格,但是如果我不想用空格隔开,我就想完整的把十六进制码输出呢?

使用-ps选项,可以单纯的连续输出十六进制码,没有空格隔开,也没有第一列的地址和最后一列的文本显示

xxd -ps /path/to/test.txt

输出如下

78786420637265617465732061206865782064756d70206f662061206769
76656e2066696c65206f72207374616e6461726420696e7075742e204974
2063616e20616c736f20636f6e766572742061206865782064756d702062
61636b20746f20697473206f726967696e616c2062696e61727920666f72
6d2e204c696b65207575656e636f646528312920616e6420757564652d63
6f646528312920697420616c6c6f777320746865207472616e736d697373
696f6e206f662062696e617279206461746120696e206120606d61696c2d
736166652720415343494920726570726573656e746174696f6e2c206275
74206861732074686520616476616e74616765206f66206465636f64696e
6720746f207374616e64617264206f75747075742e204d6f72656f766572
2c69742063616e206265207573656420746f20706572666f726d2062696e
6172792066696c65207061746368696e672e0a
打赏

订阅评论
提醒
guest

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x

扫码在手机查看
iPhone请用自带相机扫
安卓用UC/QQ浏览器扫

使用xxd查看文件的二进制码