如何将文件数据转换为纯十六进制?

Vi.*_*Vi. 11 linux command-line xxd hexdump

如何很容易地转换到/从普通的机器可读的十六进制数据(无任何填补处理/偏移/字符视图)与xddhexdump

我厌倦了挖掘一些特殊格式的字符串(并发现它突然开始在 N 个字符后换行或跳过行)或每次编写 Perl 单行。

为什么不像base64/那样简单base64 -d

use*_*686 18

hexdump -ve '1/1 "%02x"'
xxd -p | tr -d '\n'

如果您厌倦了每次都写这个,请创建一个alias

  • @Vi,将 -p 视为“普通”。我推测 Postscript 评论是因为 Postscript 语言允许以这种方式编码的内嵌数据(通常是图像)。所以 Postscript 程序员可以使用 xxd 将二进制图像转换成一种方便的形式嵌入 Postscript 文件中。 (2认同)

Red*_*ick 8

如何轻松地与普通机器可读的十六进制数据相互转换

简单来说。

$ 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)

这使用-ror-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 行十六进制数字。