Con bash
(o cualquier shell, siempre que el printf
comando esté disponible (un comando POSIX estándar a menudo integrado en los shells)):
printf '%x\n' 85
Con zsh
, también puedes hacer:
dec=85
hex=$(([##16]dec))
Eso funciona para bases del 2 al 36 (con 0-9a-z
mayúsculas y minúsculas como dígitos).
Con ksh93
, puedes usar:
dec=85
base54=$(printf %..54 "$dec")
Que funciona para bases de 2 a 64 (con 0-9a-zA-Z@_
los dígitos).
Con ksh
y zsh
, también hay:
$ typeset -i34 x=123; echo "$x"
34#3l
Aunque eso se limita a bases de hasta 36 en ksh88, zsh y pdksh y 64 en ksh93.
Tenga en cuenta que todos estos están limitados al tamaño de los long
enteros en su sistema ( int
con algunos shells). Para cualquier cosa más grande, puedes usar bc
o dc
.
$ echo 'obase=16; 9999999999999999999999' | bc
21E19E0C9BAB23FFFFF
$ echo '16o 9999999999999999999999 p' | dc
21E19E0C9BAB23FFFFF
Con bases admitidas que van desde 2 hasta algún número, POSIX requiere que sea al menos tan alto como 99. Para bases mayores que 16, los dígitos mayores que 9 se representan como números decimales con relleno de 0 separados por espacios.
$ echo 'obase=30; 123456' | bc
04 17 05 06
O lo mismo con dc
( bc
solía ser (y todavía está en algunos sistemas) una envoltura dc
):
$ echo 30o123456p | dc
04 17 05 06