Mit bash
(oder einer beliebigen Shell, sofern der printf
Befehl verfügbar ist (ein POSIX-Standardbefehl, der häufig in die Shells integriert ist):
printf '%x\n' 85
Mit zsh
können Sie auch Folgendes tun:
dec=85
hex=$(([##16]dec))
Das funktioniert für Basen von 2 bis 36 (wobei die 0-9a-z
Groß- und Kleinschreibung keine Rolle spielt).
Mit ksh93
können Sie Folgendes verwenden:
dec=85
base54=$(printf %..54 "$dec")
Welches funktioniert für Basen von 2 bis 64 (mit 0-9a-zA-Z@_
als die Ziffern).
Mit ksh
und zsh
gibt es auch:
$ typeset -i34 x=123; echo "$x"
34#3l
Dies ist jedoch auf Basen bis zu 36 in ksh88, zsh und pdksh und 64 in ksh93 beschränkt.
Beachten Sie, dass alle diese Werte auf die Größe der long
Ganzzahlen Ihres Systems beschränkt sind ( int
mit einigen Shells). Für etwas größeres können Sie bc
oder verwenden dc
.
$ echo 'obase=16; 9999999999999999999999' | bc
21E19E0C9BAB23FFFFF
$ echo '16o 9999999999999999999999 p' | dc
21E19E0C9BAB23FFFFF
Bei unterstützten Basen von 2 bis zu einer von POSIX geforderten Zahl von mindestens 99 werden Ziffern größer als 9 als durch Leerzeichen getrennte, mit 0 aufgefüllte Dezimalzahlen dargestellt.
$ echo 'obase=30; 123456' | bc
04 17 05 06
Oder dasselbe mit dc
(war bc
früher (und ist auf einigen Systemen immer noch) ein Wrapper dc
):
$ echo 30o123456p | dc
04 17 05 06