Vi.*_*Vi. 11 linux command-line xxd hexdump
如何很容易地转换到/从普通的机器可读的十六进制数据(无任何填补处理/偏移/字符视图)与xdd
或hexdump
?
我厌倦了挖掘一些特殊格式的字符串(并发现它突然开始在 N 个字符后换行或跳过行)或每次编写 Perl 单行。
为什么不像base64
/那样简单base64 -d
?
如何轻松地与普通机器可读的十六进制数据相互转换
简单来说。
$ xxd -plain test.txt > test.hex $ xxd -plain -revert test.hex test2.txt $ diff test.txt test2.txt $
解释:
$ xxd -plain test.txt > test.hex
Run Code Online (Sandbox Code Playgroud)
这会将 test.txt 中数据的十六进制编码写入新文件 test.hex。的-p
或-plain
选项使得XXD使用“普通”的十六进制格式对十六进制数字之间没有空格(字节值之间即没有空格)。这会将“abc ABC”转换为“61626320414243”。如果没有-p
它,它会将文本转换为面向 16 位字的传统 hexdump 格式,这可以说更容易阅读但不那么紧凑,因此不太适合作为传输格式,并且稍微难以逆转。
$ xxd -plain -revert text.hex test2.txt
Run Code Online (Sandbox Code Playgroud)
这使用-r
or-revert
选项进行反向操作。该-plain
选项再次用于指示输入的十六进制文件是纯格式的。
我使输出文件名与原始文件名不同,以便我们稍后可以将结果与原始文件进行比较。
$ diff test.txt test2.txt
$
Run Code Online (Sandbox Code Playgroud)
diff 命令不输出任何内容 - 这意味着原始文件内容和重构文件内容之间没有区别。
我厌倦了挖掘一些特殊格式的字符串
在您的 .profile 中使用别名或声明函数来创建助记符,这样您就不必在手册页中记住或挖掘。
或者只是记住-plain
和-revert
。
包装输出
是的,输出中有换行符。你想避免这种情况。您可以使用-c
或-cols
选项来指定您希望输出行的长度,以尝试避免输出换行。-c 0
给出默认长度,手册页建议 256 是限制,但它似乎超出了这个限制。
$ xxd -plain -cols 9999 test.txt > test.hex
$ wc test.txt test.hex
121 880 4603 test.txt
1 1 9207 test.hex
Run Code Online (Sandbox Code Playgroud)
该wc
单词计数命令告诉我们很多行,字和字符如何在每个文件。
因此 121 行(880 个字,4603 字节)的 ASCII 文本被编码为 1 行十六进制数字。