在 Linux 命令行中将十六进制转换为 ASCII 字符

有一堆十六进制字符并想将它们转换为可读的十进制系统 (ASCII)?

在 Linux 中有多种方法可以将十六进制转换为 ASCII。 如果需要,您也可以在您的 shell 脚本中使用这些方法。

在 Linux 中将十六进制转换为 ASCII

十六进制是一种数字系统,您可以使用数字 (0-9) 的组合来表示从 0 到 9 的值,并使用字母 (AF) 来表示从 10 到 15 的值。

这听起来可能很复杂,但它仍然比二进制编号更好,其中一切都是 1 和 0。

几十年前,十六进制被广泛用于微控制器。 您仍然可以看到它在使用中,尤其是用于表示各种颜色深浅的​​ Hex 调色板。

另一方面,ASCII 代表美国信息交换标准代码,其用例与十六进制完全不同。 ASCII 是一种用于将普通语言字符转换为二进制的方法,因此计算机可以理解我们这边的指令。

通过本指南,我将介绍各种轻松将十六进制转换为 ASCII 的方法。

让我们考虑以下我要转换的十六进制代码(问题陈述):

4c696e757868616e64626f6f6b20313233

如果我成功转换了上面的十六进制代码,ASCII 转换应该是这样的:

Linuxhandbook 123

方法一:使用 xdd 命令

xdd 是一个命令行实用程序,可以从给定文本创建十六进制转储,反之亦然。

首先,我将使用 echo 命令输入十六进制字符串,并使用管道将其与 xdd 配对。

echo 4c696e757868616e64626f6f6b20313233 | xxd -r -p

这里,命令选项 -r 用于将十六进制代码转换为 ASCII,而 -p 用于打印纯文本。

[email protected]:~$ echo 4c696e757868616e64626f6f6b20313233 | xxd -r -p 
Linuxhandbook [email protected]:~$ 

正如您在上面看到的,输出与终端中的提示混合在一起,因为转换后的输出没有换行符。 为了使其更具可读性,您可以附加 echo '' 到上面的命令。

echo 4c696e757868616e64626f6f6b20313233 | xxd -r -p && echo ''
使用 xdd 将十六进制转换为 ASCII

方法二:使用 printf 命令

是的,您可以使用 bash printf 命令。 在这里,我将使用 x 选项,该选项将输入 1 位或 2 位数字,如下所示:

printf 'x4cx69x6ex75x78x68x61x6ex64x62x6fx6fx6bx20x31x32x33'

如果您在十六进制字符串的末尾得到一个数字,则没有问题,它会像演示的那样正常工作。

使用 printf 将十六进制转换为 ASCII

方法 3:使用 dc 命令

您可能想知道我们如何使用甲板计算器 (dc) 将十六进制转换为 ASCII,我将向您展示具体方法。

echo "16i 4C696E757868616E64626F6F6B20313233 P" | dc

这里, 16i 用于表示您正在处理十六进制基数,并且 用于打印 dc 命令的输出。

通过使用上面的命令,您将得到类似的结果,如下所示:

使用 dc 将十六进制转换为 ASCII

方法四:使用 Perl 命令

因此,如果您的系统安装了 Perl,您可以使用此方法轻松地将十六进制转换为 ASCII。 只需在给定的命令中将我的十六进制代码与您的代码互换即可。

echo 4c696e757868616e64626f6f6b20313233 | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie' && echo ''

您将看到如下所示的结果:

使用 Perl 将十六进制转换为 ASCII

方法五:使用 sed 命令

此方法与上述方法有点相似,但这里您使用 sed 过滤并使用普通表达式将十六进制转换为 ASCII。

echo -n 4c696e757868616e64626f6f6b20313233 | sed 's/([0-9A-F]{2})/\x1/gI' | xargs printf && echo ''

通过使用管道,我们通过 echo 收集哈希字符串,通过将 sed 与给定表达式配对将其转换,并得到给定的输出。

使用 sed 将十六进制转换为 ASCII

方法6:转换存储在文本文件中的十六进制字符串

因此,如果您在文本文件下存储了十六进制字符串,则可以使用此方法将存储的十六进制字符串转换为 ASCII。

我的十六进制字符串存储在 hex.txt 文件中,因此要转换该字符串,我必须遵循给定的命令:

cat hex.txt | xxd -r -p && echo ''

到目前为止,这是最方便的方法,因为您不必一次又一次地输入十六进制字符串,最好的部分是您可以存储多个十六进制字符串并使用相同的命令对其进行转换。

使用十六进制文件将十六进制转换为 ASCII

这是我对如何使用各种方法将十六进制字符串转换为 ASCII 的看法。 到目前为止,最后一个是我最喜欢的,因为与其他相比,它非常有效。