Linux常用命令-xxd

命令

xxd

描述

make a hexdump or do the reverse
反编译文件内容,十六进制转换

用法

1
xxd [options] [infile [outfile]]

选项

1
2
3
4
5
6
7
8
9
10
11
Options:
-a 切换自动换行,默认关闭
-b 转换为二进制格式,默认为十六进制
-c 每行显示几个字节,默认为16
-g 指定几个字节为1组,默认为2
-i 转换为C语言include头文件格式
-l 指定显示前几个字节
-p 转换为纯十六进制格式
-r 将十六进制转换成二进制
-s 指定从第几个字节开始转换,正数表示跳过前几个字节,负数表示只显示后几个字节
-u 使用大写十六进制字母

注意

转换前建议先做好文件备份

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
$ more a
a
b
c
123
# 默认为十六进制,两个字节为1组显示
$ xxd a
0000000: 610a 620a 630a 3132 330a a.b.c.123.
# -b转换为二进制格式
$ xxd -b a
0000000: 01100001 00001010 01100010 00001010 01100011 00001010 a.b.c.
0000006: 00110001 00110010 00110011 00001010 123.
# -g1设置为单字节1组显示
$ xxd -g1 a
0000000: 61 0a 62 0a 63 0a 31 32 33 0a a.b.c.123.
# -i转换为C语言头文件格式
$ xxd -i a
unsigned char a[] = {
0x61, 0x0a, 0x62, 0x0a, 0x63, 0x0a, 0x31, 0x32, 0x33, 0x0a
};
unsigned int a_len = 10;
$ xxd -i < a
0x61, 0x0a, 0x62, 0x0a, 0x63, 0x0a, 0x31, 0x32, 0x33, 0x0a
# -l4指定显示前4个字节
$ xxd -l4 a
0000000: 610a 620a a.b.
# -p转换为纯十六进制格式
$ xxd -p a
610a620a630a3132330a
# 使用十六进制转换文件a,输出到文件b
$ xxd a b
$ more b
0000000: 610a 620a 630a 3132 330a a.b.c.123.
# 将十六进制转换成二进制
$ xxd -r b
a
b
c
123
# 从第2个字节开始转换
$ xxd -s 2 a
0000002: 620a 630a 3132 330a b.c.123.
# 只显示最后两个字节
$ xxd -s -2 a
0000008: 330a 3.
# 显示大写十六进制字母
$ xxd -u a
0000000: 610A 620A 630A 3132 330A a.b.c.123.
# 将字符转换为十六进制,echo -n不显示最后的换行符
$ echo -n a | xxd -i
0x61
# 将十六进制转换为字符
$ echo 0x61 | xxd -r
a
$ echo 0x31 | xxd -r
1