![如何将文件数据转换为纯十六进制?](https://linux22.com/image/1274560/%E5%A6%82%E4%BD%95%E5%B0%86%E6%96%87%E4%BB%B6%E6%95%B0%E6%8D%AE%E8%BD%AC%E6%8D%A2%E4%B8%BA%E7%BA%AF%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%EF%BC%9F.png)
如何使用xdd
或轻松地转换为/从普通机器可读的十六进制数据(没有任何填充/偏移/字符视图) hexdump
?
我厌倦了挖掘一些特殊格式的字符串(并发现它突然在 N 个字符后开始换行或跳过行)或每次都编写 Perl 单行代码。
为什么它不像base64
/那么简单base64 -d
?
答案1
答案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:]'