在 Linux Shell 中将十六进制转换为 ASCII 字符
简介
如果一个数字系统以 16 为基数,则它被视为十六进制。本文将讲解如何在 Linux Shell 中将十六进制转换为 ASCII。十六进制系统使用数字和字母的组合,如下所示 -
0 1 2 3 4 5 6 7 8 9 A B C D E F
大型数字系统最适合使用十六进制数字系统,因为它可以存储和表示较长的二进制数据。由于该系统总共使用 16 个符号(数字和字母,范围从 0 到 F)来表示,因此被称为 base16。
通过其字符编码标准 ASCII(即美国信息交换标准代码),电子通信得以实现。因此,该标准负责计算机和电信设备等技术中的文本表示。
例如,如果您想将用户简历转换为 ASCII 格式,最终结果将是纯文本,不包含任何文本样式,例如制表符、粗体或下划线。计算机可以快速处理这种原始格式。这也使得其他应用程序可以轻松导入和/或使用最终文档。
Linux 的一大优点是,我们只需使用命令即可完成大多数任务。字符转换是此类过程的绝佳例证。
在本简短课程中,我们将介绍几种从命令行将十六进制字符转换为 ASCII 的方法。
用例
我们以以下十六进制字符为例 -
54 54 75 74 6F 72 69 61 6C 73 20 50 6F 69 6E 74 75 74 6F 72 69 61 6C 73 20 50 6F 69 6E 74
理论上,上述十六进制字符对应的 ASCII 字符表示形式为 −
教程要点
我们将研究各种基于 Linux 的方法来实现上述解决方案。
方法 1:使用 printf 命令
printf 命令会根据指定的数据格式格式化并打印数据输入。
我们可以使用此命令将十六进制字符转换为 ASCII 字符 −
$ printf '\x54 \x75 \x74 \x6F \x72 \x69 \x61 \x6C \x73 \x20 \x50 \x6F \x69 \x6E \x74' && echo ''
$ printf '\x54 \x75 \x74 \x6F \x72 \x69 \x61 \x6C \x73 \x20 \x50 \x6F \x69 \x6E \x74' && echo '' Output: T u t o r i a l s P o i n t
在本例中,我们仅使用 \x 格式说明符来表示十六进制数。
方法 2:使用 echo 和 xxd 命令
xxd 命令主要用于创建十六进制字符样本的十六进制转储,或撤消上述操作。首先,echo 命令会接受十六进制字符样本作为输入,然后将其传递给 xxd 命令,后者会将其转换为 ASCII 字符。
$ echo 54 75 74 6F 72 69 61 6C 73 20 50 6F 69 6E 74 | xxd -r -p && echo ''
$ echo 54 75 74 6F 72 69 61 6C 73 20 50 6F 69 6E 74 | xxd -r -p && echo '' Output: Tutorials Point
命令分解如下
-r - 将十六进制字符转换为 ASCII 字符
-p - 以纯文本形式打印输出
echo - 在 Linux 终端上生成一个新行
方法 3:使用 sed 命令
在打印最终输出之前,使用 sed 命令过滤并转换十六进制字符输入,方法是将其传递给正则表达式,然后转换为 ASCII 字符。
我们使用管道通过 echo 收集哈希字符串,然后通过 sed 将其转换为给定的表达式,最后得到如下所示的输出。
$ echo -n 5475746F7269616C7320506F696E74 | sed 's/\([0-9AF]\{2\}\)/\\\x\1/gI' | xargs printf && echo ''
$ echo -n 5475746F7269616C7320506F696E74 | sed 's/\([0-9AF]\{2\}\)/\\\x\1/gI' | xargs printf && echo '' Output: Tutorials Point
方法 4:使用 dc 命令
或者,我们可以使用 dc 命令将十六进制字符转换为 ASCII 字符。桌面计算器缩写为 dc。此命令接受后缀表示法的输入。
在本例中,16i 表示您正在处理十六进制基数,而 P 表示打印 dc 命令的输出。
$ echo "16i 5475746F7269616C7320506F696E74 P" | dc
$ echo "16i 5475746F7269616C7320506F696E74 P" | dc Output: Tutorials Point
由于转换后的输出缺少换行符,因此会与终端中的提示符混合,如上所示。您可以在上述命令中添加"echo"以增强可读性。
$ echo "16i 5475746F7269616C7320506F696E74 P" | dc && echo''
$ echo "16i 5475746F7269616C7320506F696E74 P" | dc && echo'' Output: Tutorials Point
方法 5:使用 perl 命令
使用 perl,我们可以轻松地将十六进制数据转换为 ASCII 格式。让我们在 Linux 终端上执行以下命令。
$ echo 5475746F7269616C7320506F696E74 | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie' && echo ''
$ echo 5475746F7269616C7320506F696E74 | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie' && echo '' Output: Tutorials Point
结论
在本文中,我们研究了几个将十六进制字符转换为 ASCII 字符的实际示例。我们首先演示了 printf 和 echo 命令的示例,然后执行了 dc 命令,最后演示了 perl 命令的实际操作。我们可以使用这些命令来提高日常生活的效率。这些是在 Linux Shell 中将十六进制字符转换为 ASCII 字符的有效方法。
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

