Com bash
(ou qualquer shell, desde que o printf
comando esteja disponível (um comando POSIX padrão, geralmente construído nos shells)):
printf '%x\n' 85
Com zsh
, você também pode fazer:
dec=85
hex=$(([##16]dec))
Isso funciona para bases de 2 a 36 (com 0-9a-z
distinção entre maiúsculas e minúsculas como os dígitos).
Com ksh93
, você pode usar:
dec=85
base54=$(printf %..54 "$dec")
Que funciona para bases de 2 a 64 (com 0-9a-zA-Z@_
os dígitos).
Com ksh
e zsh
, há também:
$ typeset -i34 x=123; echo "$x"
34#3l
Embora isso seja limitado a bases de até 36 em ksh88, zsh e pdksh e 64 em ksh93.
Observe que todos esses são limitados ao tamanho dos long
números inteiros no seu sistema ( int
com alguns shells). Para qualquer coisa maior, você pode usar bc
ou dc
.
$ echo 'obase=16; 9999999999999999999999' | bc
21E19E0C9BAB23FFFFF
$ echo '16o 9999999999999999999999 p' | dc
21E19E0C9BAB23FFFFF
Com bases suportadas que variam de 2 a algum número exigido pelo POSIX, pelo menos, até 99. Para bases maiores que 16, dígitos maiores que 9 são representados como números decimais preenchidos com 0 e separados por espaço.
$ echo 'obase=30; 123456' | bc
04 17 05 06
Ou o mesmo com dc
( bc
costumava ser (e ainda está em alguns sistemas) um invólucro dc
):
$ echo 30o123456p | dc
04 17 05 06