仅将十六进制字符串中的字符转换为十进制

仅将十六进制字符串中的字符转换为十进制

我有以下十六进制字符串

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

相关内容