总览 (SYNOPSIS)

xxd -h[elp]
xxd [options] [infile
[outfile]]
xxd -r[evert] [options] [infile [outfile]]

描述 (DESCRIPTION)

xxd 建立 一个 指定 文件 或者 标准 输入 的 十六 进制 转储, 同时 也 可以把 十六
进制 转储 转换成 原来的 二进制 形式. 同 uuencode(1)uudecode(1) 一样, 它
也可以 把 二进制 数据 转换成 ASCII 表示 形式, 这样 电子邮件 就可以安全的 传输. 但是 它 有 一个 优点, 就是 可以 把 解码后 的 结果
输出 到标准输出. 同时 它 还可以 用来 给 二进制 文件 打补丁.

选项 (OPTIONS)

如果 没有 给定 infile 就用 标准输入. 如果 infile 是 一个
`-' 字符, 也从 标准输入 读入. 如果 没有 给定 outfile (或者 它的 文件名 是 一个 `-'
字符), 结果 将 输出至 标准输出.

注意 我们 用的 是 一个 很 "懒" 的 解析器, 它 只 检查 选项的 第一个 字符, 除非 这个 选项 有 参数. 在 一个 单 字符 的 选项 和
它的 参数 之间的 空格可有可无. 选项的 参数 可以 用 十进制, 十六进制 或者 八进制的 形式 指定. 也就是说 -c8, -c
8
, -c 010-cols 8 是 等价的.

-a | -autoskip
打开/关闭 autoskip: 用一个 单独的 '*' 来 代替 空行. 默认 关闭.
-b | -bits
转到 比特(二进制 数字) 模式, 而 不是 十六进制 模式. 在 这种 模式 下, 每个 字符 被 表示成 八个 0/1 的 数字, 而 不是 一般的
十六进制 形式. 每 一行 都 以 一个 用 十六进制 形式 表示的 行号, 后面 是 ascii (或者 ebcdic) 形式 开头. 命令行 选项 -r,
-p, -i 在 这个 模式下 不起作用.
-c cols | -cols cols
-c cols | -cols cols 每行 表示 <cols> 个 字符. 默认 16
(-i: 12, -ps: 30, -b: 6). 最多 256.
-E | -EBCDIC
把 右手边的 字符 编码 从 ASCII 变为 EBCDIC. 这个 并不 改变 其 十六进制表示 形式. 同 -r, -p 或者 -i 一起用 是
没有 意义的.
-g bytes | -groupsize bytes
每 <bytes> 个 字符 (每 两个 十六进制 字符 或者 八个 二进制 数字) 之间 用 一个 空格 隔开. 用
-g 0 禁止 分组. 在 普通 模式 中 <Bytes> 默认 是 2 在 二进制 模式 中 是
1. 分组 并不 适用于 postscript 或者 include style 选项.
-h | -help
显示 可用 命令 概述 并且 退出. 不做 其它 任何 事情.
-i | -include
输出 为 C 语言的 包含 文件 形式. 除非 xxd 从 标准输入 读入, 不然 会 输出 一个完整的 静态 数组 定义(与 输入 文件 同名).
-l len | -len len
输出 <len> 个 字符 后 停止.
-p | -ps | -postscript | -plain
以 postscript 的 连续 十六进制 转储 输出. 这 也叫做 纯 十六进制 转储.
-r | -revert
逆向 操作: 把 十六进制 转储 转换 (或者 打补丁) 成 二进制 形式. 如果 不 输出 到标准输出, xxd 并不把 输出 文件 截断, 而是
直接 写到 输出 文件. 用 -r -p 来 从 一个 没有 行号 没有 某种 列格式 的 纯 十六进制 转储 读入. 附加的 空格和 换行 可以
出现 在 任何 地方.
-seek offset
用在 -r 之后: 会在 当前 文件的 偏移量 上 增加 <offset>.
-s [+][-]seek
从 infile 的 绝对 或者 相对 偏移量 <seek> 开始. + 表示 相对于 标准 输入 当前的 位置
(如果 不是 标准输入 就没有 意义了). - 表示 从 文件 末尾 (如果 和 + 连用: 从 标准输入 当前 位置) 向前 数
一些 字符, 从 那个地方 开始. 如果 没有 -s 选项, xxd 从 当前 位置 开始.
-u
用大写字母. 默认的是小写字母.
-v | -version
显示 版本 字符串.

告诫 (CAVEATS)

xxd -r 在 对待 行号 上 有一些 地方 值得 注意. 如过 输出 文件 可以 定位, 那么 在 十六进制 文件 中的 行首的 行号
可以 重叠, 顺序 可以 打乱, 还 可以 略去 一些 行号. 这种 情况 下, xxd 会 用 lseek(2) 来 定位. 如果 输出 文件 不可以
定位, 那么 行号 可以 不连续, 但是 必须 按顺序, 这种 情况 下, 中间 会 插入 null 字符.

xxd -r 从不 输出 解析 错误. 错误 会 被跳过.

在 编辑 十六进制 文件时 要 注意 xxd -r 在 读入 足够列 之后 会跳过 本行 后面 所有的 数据 (见 选项 -c). 这
就是说 对可打印的 ASCII (或者 EBCDIC) 的修改 都会被 忽略. 用 xxd -r -p 把一个 纯十六进制 转储文件 (或者
postscript) 恢复 成二进制文件 与 列数 是否 正确 没有 什么 关系, 它会 解释 所有 看起来像 两个 十六进制的 数字.

请 注意
% xxd -i file

% xxd -i < file 的 区别.

因为 lseek(2) 是 用来 重置 输入指针的, 所以 xxd -s +seekxxd -s seek
有区别的. 如果 输入 是 标准输入, 并且 在 xxd 被执行是 它的 标准输入的 指针位置 不是在 文件的 开头, 那么 多了个 '+' 效果 就会
不一样了. 下面的 例子 可能帮助你 弄清楚(也可能 让你 更糊涂)...

在读 之前 需要 重置 输入的 文件指针; 因为 `cat' 已经 读到了 输入的 文件尾.
% sh -c 'cat >
plain_copy; xxd -s 0 > hex_copy' < file

从 0x480 (=1024+128) 开始读. `+' 表明 "相对于 当前的 文件位置", 也就是说从 dd 读了 1k, 在此 基础上 再加
`128'.
% sh -c 'dd of=plain_snippet bs=1k count=1; xxd -s +128 >
hex_snippet' < file

从 0x100 ( = 1024-768) 开始读.
% sh -c 'dd of=plain_snippet bs=1k count=1;
xxd -s +-768 > hex_snippet' < file

可是, 这种 情况 很少 发生, 我们 也 很少 需要用 `+'. 当用了 -s 是, 作者 比较喜欢 用 strace(1) 或者
truss(1) 去 监控 xxd 的 行为.

例子 (EXAMPLES)

(译者: 实际 输出 可能 和 例子 有 一些 出入, 只要 理解 其 意思 就行了)
显示 file 除了 前 三行
(十六进制 的 0x30) 的 所有 内容.
% xxd -s 0x30 file


显示
file 最后 三行 (十六进制 的 0x30) 的 所有 内容.
% xxd -s -0x30
file


显示 120 个 字符, 每行 20 个 字符, 连续 显示.
% xxd -l 120 -ps -c 20 xxd.1


2e544820585844203120224d616e75616c207061

676520666f7220787864220a2e5c220a2e5c2220

32317374204d617920313939360a2e5c22204d61

6e207061676520617574686f723a0a2e5c222020

2020546f6e79204e7567656e74203c746f6e7940

7363746e7567656e2e7070702e67752e6564752e

显示 120 个 字符, 每行 12 个 字符.
% xxd -l 120 -c 12 xxd.1
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 <t
0000060: 6f6e 7940 7363 746e
7567 656e ony@sctnugen
000006c: 2e70 7070 2e67 752e 6564 752e
.ppp.gu.edu.

只 显示 xxd.1 中 的 日期.
% xxd -s 0x28 -l 12 -c 12 xxd.1

0000028: 3231 7374 204d 6179 2031 3939 21st May 199

input_file 考到 output_file 并 在 前面 增加 100 个 字节的 0x00.

% xxd input_file | xxd -r -s 100 > output_file

给 文件 xxd.1 中的 日期 打 补钉.
% echo '0000029: 3574 68' | xxd -r -
xxd.1

% xxd -s 0x28 -l 12 -c 12 xxd.1
0000028: 3235 7468 204d
6179 2031 3939 25th May 199

建立 一个 65537 字节的 文件, 所有 字节 都是 0x00, 除了 最后 一个 字节 是 'A' (十六进制 0x41).

% echo '010000: 41' | xxd -r > file

打开 autoskip, 显示 上例 中 建立的 文件.
% xxd -a -c 12 file
0000000:
0000 0000 0000 0000 0000 0000 ............
*
000fffc: 0000 0000 40 ....A

建立 一个 只 含有 一个 'A' 的 文件. '-r -s' 后面 的数字 同 文件 中的 行号 相 抵消; 结果是 开头 的 字节 被跳过了.

% echo '010000: 41' | xxd -r -s -0x10000 > file

在 编辑器, 比如 vim(1) 中 把 xxd 当成 一个 过滤 程序 来用, 用 十六进制 来 显示被 标记 为 'a' 和
'z' 中间 的 区域.
:'a,'z!xxd

在 编辑器, 比如 vim(1) 中 把 xxd 当成 一个 过滤 程序 来用, 用来 恢复 被 标记 为 'a' 和 'z' 中间
的 区域 的 十六进制 显示.
:'a,'z!xxd -r

在 编辑器, 比如 vim(1) 中 把 xxd 当成 一个 过滤 程序 来用, 用来 恢复 一行的十六进治 显示. 把 光标 移动
到 相应行 并 键入:
!!xxd -r

从 串行线 中 读入 一个个的 单独的 字符.
% xxd -c1 < /dev/term/b &
%
stty < /dev/term/b -echo -opost -isig -icanon min 1

% echo -n foo
> /dev/term/b

返回值 (RETURN VALUES)

此 程序 返回 如下的 错误码:

0
一切 正常.
-1
不支持 此 操作 ( xxd -r -i 仍然 不行).
1
解析 选项 错误.
2
输入 文件 出错.
3
输出 文件 出错.
4,5
指定 的 偏移量 地址 不可 到达.

xxd - 以十六进制形式表示的更多相关文章

  1. 把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列。

    编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列. 实现了unsigned long型的转换. // 十进制转换为二进制,十进制数的每1bit转换为二进制的1 ...

  2. jquery如何将获取的颜色值转换为十六进制形式

    jquery如何将获取的颜色值转换为十六进制形式:大家或许已经注意到了,在谷歌.火狐和IE8以上浏览器中,获取的颜色值是RGB形式,例如rgb(255,255,0),感觉非常不适应,或者在实际编码中不 ...

  3. [Windows] [VS] [C] [取得指针所指内存的十六进制形式字符串]

    接口定义如下: #include <Windows.h> // 取得指针所指内存的十六进制形式字符串,size指定字节长度 #define Mem_toString(address, si ...

  4. 字节数组X中存放着 0~F共16个十六进制数,请将这些数以十六进制形式显示在屏幕上。

    问题 字节数组X中存放着 0~F共16个十六进制数,请将这些数以十六进制形式显示在屏幕上. 代码 data segment x db 0,1,2,3,4,5,6,7,8,9,0ah,0bh,0eh,0 ...

  5. 统计一个16位二进制数中1的个数,并将结果以十六进制形式显示在屏幕上,用COM格式实现。

    问题 统计一个16位二进制数中1的个数,并将结果以十六进制形式显示在屏幕上,用COM格式实现. 代码 code segment assume cs:code org 100h main proc ne ...

  6. 【C语言】十六进制形式输出应用程序

    1.前言 最近在看到同事写了一款封印病毒的程序,非常有意思!原理大致是将PE文件中的ASCII转换成HEX输出到文本中.这样做的目的是为了保存病毒样本的时候不会被杀毒软件查杀!然而却是delphi写的 ...

  7. linux二进制/十六进制日志文件如何查看和编辑

    使用cat查看二进制,显示乱码 [root@localhost ~]# cat /var/log/wtmp ~~~reboot3.10.0-514.el7.x86_64 �YO#5~~~runleve ...

  8. 使用vim打开文件的16进制形式,编辑和全文替换

    1.先用vim打开文件的二进制形式,如果不以二进制可能会产生转换错误. vim -b file-to-open.dat 2.用xxd把文件转换成十六进制格式 :%!xxd 现在就可以对待普通文本一样查 ...

  9. javascript 十六进制与RGB颜色值的相互转换

    http://www.zhangxinxu.com/wordpress/?p=646 http://www.zhangxinxu.com/wordpress/?p=646 -------------- ...

随机推荐

  1. strcoll - 用当前的区域选项来比较两个字符串

    总览 (SYNOPSIS) #include <string.h> int strcoll(const char *s1, const char *s2); 描述 (DESCRIPTION ...

  2. Sql批量修改语句

    修改某个数字类型字段 SET @num = 10000000000001; #定义初始化变量参数 UPDATE ckys_me #更新的表 SET openid = (@num := @num+1) ...

  3. nginx信号及平滑升级

    1.nginx信号 nginx进程处理命令: kill -signals PID PID即nginx进程ID signals的参数解释如下所示: TERM,INT快速关闭进程 QUIT优雅的关闭,如果 ...

  4. mysql莫名报"unknown column ... in 'on clause'"

    今天遇见个会诡异的问题 一个web程序本地调试的好好的,结果发布到服务器上程序就报错了,报"unknown column ... in 'on clause'",网上搜了下,说是m ...

  5. K8S集群安装部署

    K8S集群安装部署   参考地址:https://www.cnblogs.com/xkops/p/6169034.html 1. 确保系统已经安装epel-release源 # yum -y inst ...

  6. java 多上传 CommonsMultipartFile[] files

    /** * 视频上传 * ddl * @param request * @param response * @param files * @return * @throws Exception */@ ...

  7. C存储类

    C 存储类 存储类定义 C 程序中变量/函数的范围(可见性)和生命周期.这些说明符放置在它们所修饰的类型之前.下面列出 C 程序中可用的存储类: auto register static extern ...

  8. 文件系统类型(ext4、ntfs)

    Linux 1.Linux:存在几十个文件系统类型:ext2,ext3,ext4,xfs,brtfs,zfs(man 5 fs可以取得全部文件系统的介绍) 不同文件系统采用不同的方法来管理磁盘空间,各 ...

  9. MaxCompute新功能发布

    2018年Q3 MaxCompute重磅发布了一系列新功能. 本文对主要新功能和增强功能进行了概述. 实时交互式查询:Lightning on MaxCompute 生态兼容:Spark on Max ...

  10. 解决SQLite中的 database is locked

    前些时候,同事在站点服务端使用SQlite存储一些临时数据,但是在多人并发的时候Sqlite会抛出异常:The database file is locked , database is locked ...