Com bash
(ou qualquer shell, desde que o comando printf
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
insensível a 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@_
como os dígitos).
Com ksh
e zsh
, também há:
$ typeset -i34 x=123; echo "$x"
34#3l
Embora isso esteja limitado a até 36 em ksh88, zsh e pdksh e 64 em ksh93.
Observe que todos esses são limitados ao tamanho dos long
inteiros em seu sistema ( int
com alguns shells). Para algo maior, você pode usar bc
ou dc
.
$ echo 'obase=16; 9999999999999999999999' | bc
21E19E0C9BAB23FFFFF
$ echo '16o 9999999999999999999999 p' | dc
21E19E0C9BAB23FFFFF
Com bases suportadas variando de 2 a algum número requerido pelo POSIX para ser pelo menos tão alto quanto 99. Para bases maiores que 16, dígitos maiores que 9 são representados como números decimais com 0 números separados por espaço.
$ echo 'obase=30; 123456' | bc
04 17 05 06