在 Linux Bash Shell 中将十六进制转换为 ASCII 字符
以下是在 Linux 命令行和 bash 脚本中将十六进制转换为 ASCII 字符的多种方法。
拥有一堆十六进制字符并希望将它们转换为可读的十进制系统 (ASCII)?
在 Linux 中将十六进制转换为 ASCII 有多种方法。如果需要,您还可以在 shell 脚本中使用这些方法。
在 Linux 中将十六进制转换为 ASCII
十六进制是一种数字系统,其中使用数字 (0-9) 的组合来表示 0 到 9 的值,使用字母 (A-F) 的组合来表示 10 到 15 的值。
这听起来可能很复杂,但它仍然比一切都是 1 和 0 的二进制编号要好。
几十年前,十六进制在微控制器中广泛使用。您仍然可以看到它在使用中,特别是使用用于表示各种颜色深浅的十六进制调色板。
另一方面,ASCII 代表美国信息交换标准代码,其用例与十六进制完全不同。 ASCII 是一种用于将普通语言字符转换为二进制的方法,以便计算机可以理解我们这边的指令。
通过本指南,我将介绍各种可以轻松将十六进制转换为 ASCII 的方法。
让我们考虑一下我想要转换的以下十六进制代码(问题陈述):
4c696e757868616e64626f6f6b20313233如果我成功转换上述十六进制代码,则 ASCII 转换应如下所示:
Linuxhandbook 123方法一:使用xxd命令
xxd 是一个命令行实用程序,可以从给定文本创建十六进制转储,反之亦然。
首先,我将使用 echo 命令输入十六进制字符串,并使用管道将其与 xxd 配对。
echo 4c696e757868616e64626f6f6b20313233 | xxd -r -p这里,命令选项 -r 用于将十六进制代码转换为 ASCII,而 -p 用于打印纯文本。
sagar@linux:~$ echo 4c696e757868616e64626f6f6b20313233 | xxd -r -p
Linuxhandbook 123sagar@linux:~$
正如您在上面看到的,输出与终端中的提示混合在一起,因为转换后的输出没有换行符。 为了使其更具可读性,您可以在上述命令后附加 echo ''。
echo 4c696e757868616e64626f6f6b20313233 | xxd -r -p && echo ''方法二:使用printf命令
是的,您可以使用 bash printf 命令将十六进制转换为 ASCII。在这里,我将使用 \x 选项,它将接受 1 或 2 位数字的输入,如下所示:
printf '\x4c\x69\x6e\x75\x78\x68\x61\x6e\x64\x62\x6f\x6f\x6b\x20\x31\x32\x33'如果您在十六进制字符串末尾得到一个数字,那就没有问题,并且可以正常工作,如图所示。
方法三:使用dc命令
您可能想知道如何使用甲板计算器 (dc) 将十六进制转换为 ASCII,我将向您展示具体的操作方法。
echo "16i 4C696E757868616E64626F6F6B20313233 P" | dc这里,16i 用于指示您正在处理十六进制基数,P 用于打印 dc 命令的输出。
通过使用上面的命令,您将得到类似的结果,如下所示:
方法四:使用Perl命令
因此,如果您的系统安装了 Perl,您可以使用此方法轻松将十六进制转换为 ASCII。只需在给定命令中将我的十六进制代码与您的十六进制代码互换即可。
echo 4c696e757868616e64626f6f6b20313233 | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie' && echo ''您将看到如下所示的结果:
方法5:使用sed命令
此方法与上面的方法有点相似,但这里您使用 sed 使用普通表达式过滤十六进制并将其转换为 ASCII。
echo -n 4c696e757868616e64626f6f6b20313233 | sed 's/\([0-9A-F]\{2\}\)/""x\1/gI' | xargs printf && echo ''
通过使用管道,我们通过 echo 收集哈希字符串,通过将 sed 与给定表达式配对来转换它,并获得给定的输出。
方法 6:转换存储在文本文件中的十六进制字符串
因此,如果文本文件下存储有十六进制字符串,则可以使用此方法将存储的十六进制字符串转换为 ASCII。
我的十六进制字符串存储在 hex.txt 文件中,因此要转换该字符串,我必须遵循给定的命令:
cat hex.txt | xxd -r -p && echo ''到目前为止,这是最方便的方法,因为您不必一次又一次输入十六进制字符串,最好的部分是您可以存储多个十六进制字符串并使用相同的命令转换它们。
这是我对如何使用各种方法将十六进制字符串转换为 ASCII 的看法。到目前为止,最后一个是我最喜欢的,因为与其他方法相比,它非常有效。
Linux 中有专门的十六进制编辑器,如果你愿意的话也可以尝试一下。







