xxd [options] [infile [outfile]]
xxd -r[evert] [options] [infile [outfile]]
xxd 命令用于用二进制或十六进制显示文件的内容,如果没有指定outfile参数,则把结果显示在屏幕上,如果指定了outfile则把结果输出到 outfile中;如果infile参数为 – 或则没有指定infile参数,则默认从标准输入读入。
常用选项:
-b
转到 比特(二进制 数字) 模式, 而不是十六进制模式。在这种模式下, 每个字符被表示成八个 0/1 的数字,而不是一般的十六进制形式。每一行都以一个用十六进制形式表示的行号,后面是ascii (或者 ebcdic) 形式开头。命令行选项 -r, -p 在这个模式下不起作用。
-h
显示帮助信息后退出。
-l N
只输出 N 个字符。
-p
以 postscript的连续十六进制转储输出,这也叫做纯十六进制转储。
-r
逆向操作: 把xxd的十六进制输出内容转换回原文件的二进制内容。
-seek offset
用在 -r 之后: 会在当前档桉的 偏移量上增加
-s [+][-]seek
从infile的绝对或者相对偏移量
-u
十六进制输出时使用大写字母,默认是小写字母。
使用范例:(摘自xxd man page)
显示 file 除了 前 三行 (十六进制 的 0×30) 的 所有 内容.
$
显示 file 最后 三行 (十六进制 的 0×30) 的 所有 内容.
$
显示 120 个 字符, 每行 20 个 字符, 连续 显示.
$
2e544820585844203120224d
676520666f7220787864220a
32317374204d617920313939
6e207061676520617574686f
2020546f6e79204e7567656e
7363746e7567656e2e707070
显示 120 个 字符, 每行 12 个 字符.
$
0000000: 2e54 4820 5858 4420 3120 224d .TH XXD 1 “M
000000c: 616e 7561 6c20 7061 6765 2066 anual page f
0000018: 6f72 2078 7864 220a 2e5c 220a or xxd”..\”.
0000024: 2e5c 2220 3231 7374 204d 6179 .\” 21st May
0000030: 2031 3939 360a 2e5c 2220 4d61 1996..\” Ma
000003c: 6e20 7061 6765 2061 7574 686f n page autho
0000048: 723a 0a2e 5c22 2020 2020 546f r:..\” To
0000054: 6e79 204e 7567 656e 7420 3c74 ny Nugent
0000060: 6f6e 7940 7363 746e 7567 656e ony@sctnugen
000006c: 2e70 7070 2e67 752e 6564 752e .ppp.gu.edu.
只 显示 xxd.1 中 的 日期.
$
0000028: 3231 7374 204d 6179 2031 3939 21st May 199
把 input_file 考到 output_file 并 在 前面 增加 100 个 字节的 0×00.
$
给 档桉 xxd.1 中的 日期 打 补钉.
$
$
0000028: 3235 7468 204d 6179 2031 3939 25th May 199
建立 一个 65537 字节的 档桉, 所有 字节 都是 0×00, 除了 最后 一个 字节 是 ‘A’ (十六进制 0×41).
$
打开 autoskip, 显示 上例 中 建立的 档桉.
$
0000000: 0000 0000 0000 0000 0000 0000 …………
*
000fffc: 0000 0000 40 ….A
建立 一个 只 含有 一个 ‘A’ 的 档桉. ‘-r -s’ 后面 的数字 同 档桉 中的 行号 相 抵消; 结果是 开头 的 字节 被跳过了.
$
从 串行线 中 读入 一个个的 单独的 字符.
$
$
$
当我们需要把二进制转成c语言中使用的16进制字符数组时,命令xxd是很有用的。
xxd 帮助信息如下:关键选项标黑。
[root@localhost ]# xxd --help
Usage:
xxd [options] [infile [outfile]]
or
xxd -r [-s [-]offset] [-c cols] [-ps] [infile [outfile]]
Options:
-a toggle autoskip: A single '*' replaces nul-lines. Default off.
-b binary digit dump (incompatible with -p,-i,-r). Default hex.
-c cols format <cols> octets per line. Default 16 (-i: 12, -ps: 30).
-E show characters in EBCDIC. Default ASCII.
-g number of octets per group in normal output. Default 2. 每个goup的字节数,默认为2,可设置。
-h print this summary.
-i output in C include file style. :输出为c包含文件的风格,数组方式存在。
-l len stop after <len> octets. :转换到len个字节后停止转换。
-ps output in postscript plain hexdump style.
-r reverse operation: convert (or patch) hexdump into binary.
-r -s off revert with <off> added to file positions found in hexdump.
-s [+][-]seek start at <seek> bytes abs. (or +: rel.) infile offset.
-u use upper case hex letters. : 字节大写方式
-v show version: "xxd V1.10 27oct98 by Juergen Weigert".
比如运行:
> xxd -g 1 -i -u -l 10000000 nm.ts > xxd_test.txt
生成的文本显示:
unsigned char __0513_1634_ch32_666_10_ts[] = {
0X47, 0X02, 0X03, 0X13, 0XF8, 0X5A, 0XC5, 0X40, 0X26, 0XE4, 0XD0, 0XDE,
0XAD, 0XB8, 0X76, 0X89, 0X85, 0X23, 0X06, 0X04, 0X6E, 0X05, 0X8B, 0X09,
0XC0, 0X5C, 0X96, 0X4F, 0X18, 0X51, 0X41, 0XC8, 0X40, 0X9F, 0X06, 0X93,
0X38, 0XC1, 0XBB, 0X1A, 0XBC, 0XAC, 0X47, 0XFF, 0X5E, 0X54, 0XEB, 0XA7,
0X14, 0X36, 0X85, 0X8A, 0X90, 0X14, 0X17, 0XA2, 0X9D, 0XC0, 0X84, 0X56,
0XCB, 0X97, 0X78, 0XC8, 0X57, 0X15, 0X3E, 0X61, 0X6F, 0XFE, 0XC9, 0X39,
0XEF, 0XD3, 0XB6, 0X6A, 0XD2, 0XE4, 0XFB, 0X4C, 0X05, 0XF6, 0X03, 0XED,
0X50, 0XB3, 0XE7, 0X46, 0X57, 0X24, 0X71, 0X16, 0X38, 0X45, 0X53, 0X19,
0X56, 0X25, 0X3C, 0X8D, 0X4C, 0XA9, 0X28, 0X9A, 0XB2, 0X99, 0X76, 0X52,
0X28, 0XE9, 0XD6, 0XD6, 0X11, 0X94, 0X89, 0X19, 0X4D, 0XEA, 0X68, 0X76,
0X53, 0XC6, 0XAA, 0X3A, 0XD4, 0XA1, 0X25, 0XA5, 0X03, 0XB0, 0X73, 0XA0,
0XAE, 0X11, 0XC9, 0XBD, 0X37, 0X17, 0X11, 0X5F, 0X30, 0X34, 0X34, 0X0B
.....
};
unsigned int nm.ts_len = 10000000;
另外,在vim中也可以把文件转换为16进制来显示:
:%!xxd
返回正常显示:
:%!xxd -r