用char将十六进制字符串转换为十进制字符

时间:2014-06-17 14:34:09

标签: shell unix

我有一个十六进制字符串,我将它中的每个字符转换为DEC,并用空格分隔并用括号输出它们。见例子:

input: "A1B2C3D4"
output: "[10 1 11 2 12 3 13 4 ]"

1 个答案:

答案 0 :(得分:2)

这个awk one-liner完成了这项工作:

awk -v FS='' --non-decimal-data '{for(i=1;i<=NF;i++)printf "%d%s","0x"$i,(i==NF?RS:" ")}'

用你的例子测试:

kent$  echo "A1B2C3D4"|awk -v FS='' --non-decimal-data '{for(i=1;i<=NF;i++)printf "%d%s","0x"$i,(i==NF?RS:" ")}'
10 1 11 2 12 3 13 4

这里有两件事需要注意:

  • --non-decimal-data gawk识别十六进制输入的选项
  • 为每个十六进制数字添加前导0x

修改

内置printf的替代方案:

awk -v FS=''  '{for(i=1;i<=NF;i++){"printf \"%d\" \"0x"$i"\""|getline v;printf "%d%s",v,(i==NF?RS:" ")}}'

试验:

kent$   echo "A1B2C3D4"|awk -v FS=''  '{for(i=1;i<=NF;i++){"printf \"%d\" \"0x"$i"\""|getline v;printf "%d%s",v,(i==NF?RS:" ")}}'
10 1 11 2 12 3 13 4