Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 该脚本如何将十六进制转换为ascii?_Linux_Bash - Fatal编程技术网

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

Linux 该脚本如何将十六进制转换为ascii?,linux,bash,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

我有一个脚本,可以将十六进制转换为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
hex=“$1”
#将十六进制转换为ASCII
对于$(awk-v len=$(expr“$hex”:“.*”)中的i,从{for(i=1;i(不是问题的真正答案。只是为了说明解决方案太复杂了。要解释其中的所有内容需要花费很多时间。)

更简单的解决方案:

[步骤101]#hex=68656C6F0A
[步骤102]#echo$hex | sed's/./\\x&/g'
\x68\x65\x6C\x6C\x6F\x0A
[步骤103]#printf$(echo$hex | sed's/./\\x&/g')
你好
[步骤104]#
[步骤105]#echo$hex | xxd-p-r
你好
[步骤106]#
或纯Bash:


[步骤107]#对于((i=0;i如果我们给出。/hexToASCII 505152
然后在第1行:
hex=“$1”
将是
hex=“505152”

从下一行开始:

for i in $(awk -v len=$(expr "$hex" : '.*') 'BEGIN {for(i=1;i<len;i=i+2) print i;}')
awk -v d=$(printf "ibase=16\n%s\n" $(echo $hex|cut -c$i-$(expr $i + 1)) | bc) 'BEGIN {printf("%c",d);}'
将给出表达式的长度。
awk-v len
将为变量
len
指定长度

在下一行加Int:

for(i=1;i<len;i=i+2) print i;
在这方面,

echo $hex|cut -c$i-$(expr $i + 1)
在循环的第一次执行期间,i的值将为1,因此表达式将变为
echo$505152 | cut-c1-2
,并输出50(cut column1和column2)。它将以

printf("%c",50)
到ascii p

对于i的其他值,这将继续,导致将表达式505152剪切为50,51,52,并打印相应的ASCII


简而言之,这个脚本找到十六进制的长度,cut(separate)它以2的倍数打印每个片段的ascii。

由于这个脚本很酷,它可以是
xxd-r-p我在写完我的后看到了这个答案,同样,删除了很多hanks,这个脚本正在一个项目中使用,所以我将尝试使用您给我的代码替换它。该脚本用于fp之间的数据传输ga和PC。现在我放在这里的脚本有一个混乱的输出,让我们看看如果我更改它会发生什么。再次感谢您的帮助。请注意,非常感谢,我现在正在查看它。很高兴它有帮助:)
printf("%c",50)