将 HEX 文件转换为 ASCII 字符集的工具?

Aar*_*ron 2 linux ascii hexadecimal

题:

  • 是否有已知的工具可以将包含 2 字节Hex的文件转换为ascii

注意: - 以字节为单位维护文件偏移量列表

例子:

文件内容:

00000000  0054 0065 0073 0074 0020 0054 0065 0073
00000008  0074 0020 0054 0065 0073 0074 0020 0054
00000016  0065 0073 0074 0020 0054 0065 0073 0074
00000024  0020 0054 0065 0073 0074 0020 0054 0065
00000032  0073 0074 0020 0054 0065 0073 0074 0020
00000040  0054 0065 0073 0074 000a 0054 0065 0073
00000048  0074 0020 0054 0065 0073 0074 0020 0054
00000056  0065 0073 0074 0020 0054 0065 0073 0074
00000064  0020 0054 0065 0073 0074 0020 0054 0065
Run Code Online (Sandbox Code Playgroud)

预期输出

00000016  0065 0073 0074 0020 0054 0065 0073 0074  |est Test Test Te|
00000032  0073 0074 0020 0054 0065 0073 0074 0020  |st Test Test.Tes|
00000048  0074 0020 0054 0065 0073 0074 0020 0054  |t Test Test Test|
00000064  0020 0054 0065 0073 0074 0020 0054 0065  | Test Test Test |
Run Code Online (Sandbox Code Playgroud)

Den*_*son 8

您的输入文件看起来像是使用以下内容生成的:

hexdump -e '"%08_ad  "  8/1 "%04x "' -e '"" 0/0 "" "\n"' original_file
Run Code Online (Sandbox Code Playgroud)

不幸的是,xxd -r无法处理小数点偏移。

这是一个简短的 Gnu AWK 程序,可为您提供所需的输出:

gawk '{printf "%s  |", $0; for (f=2; f<=9; f++) { c = strtonum("0x" $f); if (c >= 32 && c <= 126) printf "%c",c; else printf "."}; printf "|\n"}' input_file
Run Code Online (Sandbox Code Playgroud)

如果您使用 AWK 以外的 AWK gawk,则可以在此处使用该strtonum()函数。

这是与上述gawk脚本执行相同操作的另一种方法:

cut -c 11- input_file | sed 's/\<00//g' | xxd -r -p | hexdump -e '"%08_ad  "  8/1 "%04x " ""' -e '"  |" 8/1 "%_p" "|\n"'
Run Code Online (Sandbox Code Playgroud)

相反,如果您想将输入文件转换为文本:

cut -c 11- input_file | xxd -r -p
Run Code Online (Sandbox Code Playgroud)