linux - 该脚本如何将十六进制转换为 ascii?

标签 linux bash

我有一个可以将十六进制转换为 ASCII 的脚本,但我不知道它是如何工作的。另外,我不确定它是否正确。

我想知道它是如何工作的。 用法是 ./hexToASCII {hex String}> {file}

hex="$1"

# Convert Hexa decimal to ASCII
for i in $(awk -v len=$(expr "$hex" : '.*') 'BEGIN {for(i=1;i<len;i=i+2) print i;}')
do
  awk -v d=$(printf "ibase=16\n%s\n" $(echo $hex|cut -c$i-$(expr $i + 1)) | bc) 'BEGIN {printf("%c",d);}'
done

最佳答案

(不是问题的真正答案。只是为了展示解决方案太复杂了。解释其中的所有内容需要相当多的时间。)

更简单的解决方案:

[STEP 101] # hex=68656C6C6F0A
[STEP 102] # echo $hex | sed 's/../\\x&/g'
\x68\x65\x6C\x6C\x6F\x0A
[STEP 103] # printf $(echo $hex | sed 's/../\\x&/g')
hello
[STEP 104] #
[STEP 105] # echo $hex | xxd -p -r
hello
[STEP 106] #

或纯 Bash:

[STEP 107] # for ((i=0; i<${#hex}; i+=2)); do printf "\x${hex:i:2}"; done
hello
[STEP 108] #

关于linux - 该脚本如何将十六进制转换为 ascii?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57037399/

相关文章:

linux - 使用 Perl 在终端上列出目录

linux - 在哪里可以找到在 linux 2.6.21.5-cfs-v19 上运行的 arm 目标的 gdb

bash - 使用sed删除文件中的所有评论

linux - awk/sed/grep命令比较三个文件的内容

c++ - 文件 * 和 istream : connect the two?

linux - 是否可以从sched_entity中找到对应的task_struct?

linux - 我们可以从文件中执行 grep 和 sed 并将输出推送到变量中吗

bash - 如何通过命令行获取基于 docker 镜像名称的容器 ID?

linux - 在没有 XServer 的系统上启动时运行 Emacs

c - 如何在 C 中找到我的 Tap 适配器的桥接设备名称?