我有以下十六进制字符串
17a62
我想将其转换为十进制。我使用以下方法:
echo $((16#17a62))
结果是
96866
但我不想这样,我只想用十进制值替换字符串中的“字母字符”。就像十六进制的十进制值为 10所以我希望输出如下:
171062
我怎样才能做到这一点? 任何帮助都将不胜感激。
答案1
可以用 sed 来做:
$ printf %d $(sed 's/./0x& /g' <<< 17a26b12)
答案2
如果可以使用 Perl,则可以执行以下操作:
$ echo 17a62 | perl -pe 's/[a-f]/hex $&/e'
171062
如果你确实需要在 shell 中本地执行此操作,那么使用 bash:
$ hexa=17a62
$ [[ $hexa =~ ([0-9]*)([a-f])([0-9]*) ]] && printf '%d%d%d\n' "${BASH_REMATCH[1]}" $((16#"${BASH_REMATCH[2]}")) "${BASH_REMATCH[3]}"
171062