在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字符表示理论上为:

Tutorials Point

我们将研究几种基于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 是 Desk Calculator 的缩写。此命令接受后缀表示法的输入。

在这种情况下,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字符的有效方法。

更新于:2022年11月21日

9K+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告