Преобразовать только шестнадцатеричные символы в шестнадцатеричной строке

У меня есть следующая шестнадцатеричная строка

17a62

Я хочу преобразовать ее в десятичную. Я использую следующий подход:

echo $((16#17a62))

Это приводит к

96866

, но я не хочу этого, я просто хочу заменить «символ алфавита» в строке его десятичным значением. Например, десятичное значение шестнадцатеричного числа равно 10 , поэтому я хочу, чтобы результат был таким:

171062

Как я могу этого добиться? любая помощь будет высоко ценится.

0
задан 4 June 2020 в 17:22

2 ответа

Может сделать это с помощью sed:

$ printf %d $(sed 's/./0x& /g' <<< 17a26b12)
1
ответ дан 19 June 2020 в 21:31

Если Perl является опцией, вы можете сделать что-то вроде этого:

$ echo 17a62 | perl -pe 's/[a-f]/hex $&/e'
171062

Если вам действительно нужно сделать это изначально в оболочке, затем с 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
0
ответ дан 19 June 2020 в 21:31

Другие вопросы по тегам:

Похожие вопросы: