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

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

如何使用xdd或轻松地转换为/从普通机器可读的十六进制数据(没有任何填充/偏移/字符视图) hexdump

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

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

答案1

十六进制转储-ve'1/1“%02x”'
xxd -p | tr -d'\n'

如果你厌倦了写作每次创建一个别名

答案2

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

简单来说。

$ xxd -plain 测试.txt > 测试.hex
$ xxd -plain -revert test.hex test2.txt
$ 差异测试.txt 测试2.txt
$

解释:

$ xxd -plain test.txt > test.hex

这会将 test.txt 中数据的十六进制编码写入新文件 test.hex。-p-plain选项使 xxd 使用“纯”十六进制格式,十六进制数字对之间没有空格(即字节值之间没有空格)。这会将“abc ABC”转换为“61626320414243”。如果没有,-p它会将文本转换为 16 位字导向的传统十六进制转储格式,这种格式可能更易于阅读,但不太紧凑,因此不太适合作为传输格式,而且逆转起来稍微困难一些。

$ xxd -plain -revert text.hex test2.txt

这里使用-r-revert选项进行反向操作。-plain再次使用该选项来指示输入的十六进制文件为纯文本格式。

我把输出文件名设为与原始文件名不同,以便我们稍后可以将结果与原始文件进行比较。

$ diff test.txt test2.txt
$ 

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

wordcountwc命令告诉我们每个文件有多少行、多少单词和多少字符。

因此,121 行(880 个字,4603 字节)的 ASCII 文本被编码为 1 行十六进制数字。

答案3

od这是使用实用程序(包的一部分)的版本coreutils

od -An < input | tr -dc '[:alnum:]'

相关内容