Linux xxd 命令
xxd 是一个 Linux 下的命令行工具,用于将文件或数据转换为十六进制格式显示,类似于十六进制查看器。
xxd 命令也可以将十六进制数据重新转换为二进制文件。
xxd 命令通常用于调试、文件内容分析和数据转换。
语法格式
xxd [options] [inputfile [outputfile]]
- inputfile:输入文件。如果未指定,则读取标准输入。
- outputfile:输出文件。如果未指定,则输出到标准输出。
options 参数说明:
-r
:将十六进制数据还原为二进制(反向操作)。-p
:以连续的纯十六进制形式(不带偏移地址和 ASCII)输出。-c cols
:每行输出多少个字节,默认为 16。-g bytes
:每组显示多少字节,默认为 2。-s offset
:从文件的某个偏移位置开始读取(支持负数表示从文件末尾开始)。-l length
:只显示指定长度的字节。-u
:将输出的十六进制字符转为大写。-i
:以 C 语言的数组格式输出。-b
:将输出转换为二进制格式,而不是十六进制。
常见用法
将文件以十六进制格式输出:
xxd filename
该命令会将 filename 文件以十六进制的方式显示。
将标准输入转换为十六进制:
echo "Hello World" | xxd
这会把字符串 "Hello World" 转换为十六进制并输出。
指定每行输出的字节数: 默认情况下,xxd 每行输出 16 字节的数据。可以使用 -c 参数修改:
xxd -c 8 filename
上述命令将每行显示 8 个字节的数据。
转换回原始数据: xxd 也可以将十六进制格式转换回原始的二进制数据,使用 -r 参数:
xxd -r hexfile
该命令将 hexfile 中的十六进制数据还原为二进制文件。
仅显示十六进制(不显示 ASCII): 使用 -p 选项只显示纯十六进制,不显示对应的 ASCII 字符:
xxd -p filename
控制输出的范围: 使用 -s 参数可以指定从文件的某个偏移处开始输出,使用 -l 指定输出的字节长度:
xxd -s 0x10 -l 0x20 filename
该命令从偏移量 0x10 开始,输出 0x20 字节的数据。
实例
1. 将文件内容以十六进制显示
xxd filename.txt
此命令会输出文件 filename.txt 的十六进制表示,默认每行显示 16 个字节的数据。
输出示例:
00000000: 4865 6c6c 6f0a Hello.
2. 指定每行输出的字节数
xxd -c 8 filename.txt
每行显示 8 个字节。
输出示例:
00000000: 4865 6c6c 6f0a 0000 Hello...
3. 将十六进制还原为原始文件
xxd -r hexfile.txt original.bin
此命令会将十六进制数据 hexfile.txt 还原为二进制文件 original.bin。
4. 从文件的某个偏移位置开始显示
xxd -s 0x10 filename.txt
从偏移量 0x10 开始显示十六进制内容。
5. 以纯十六进制格式输出(不带偏移地址和 ASCII)
xxd -p filename.txt
输出纯十六进制数据,所有数据连续排列。
输出示例:
48656c6c6f0a
6. 生成 C 语言中的数组格式
xxd -i filename.txt
此命令会将文件内容以 C 语言数组的形式输出。
输出示例:
unsigned char filename_txt[] = { 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x0a }; unsigned int filename_txt_len = 6;
7. 将输出的十六进制字母变为大写
xxd -u filename.txt
此命令将十六进制字母输出为大写。
输出示例:
00000000: 4865 6C6C 6F0A Hello.
8. 只显示一定长度的数据
xxd -l 16 filename.txt
此命令仅显示前 16 个字节的数据。
9. 将数据输出为二进制形式
xxd -b filename.txt
此命令会将文件内容以二进制位显示,而不是十六进制。
输出示例:
00000000: 01001000 01100101 01101100 01101100 01101111 00001010 Hello.