Za pomocą bash
(lub dowolnej powłoki, pod warunkiem, że printf
polecenie jest dostępne (standardowe polecenie POSIX często wbudowane w powłoki)):
printf '%x\n' 85
Za pomocą zsh
możesz także:
dec=85
hex=$(([##16]dec))
Działa to dla baz od 2 do 36 (z 0-9a-z
rozróżnianiem wielkości liter jak cyfry).
Za pomocą ksh93
możesz użyć:
dec=85
base54=$(printf %..54 "$dec")
Który działa dla baz od 2 do 64 (z 0-9a-zA-Z@_
cyframi).
Z ksh
i zsh
są też:
$ typeset -i34 x=123; echo "$x"
34#3l
Chociaż jest to ograniczone do baz do 36 w ksh88, zsh i pdksh i 64 w ksh93.
Zauważ, że wszystkie one są ograniczone do wielkości long
liczb całkowitych w twoim systemie ( int
z niektórymi powłokami). Do czegokolwiek większego możesz użyć bc
lub dc
.
$ echo 'obase=16; 9999999999999999999999' | bc
21E19E0C9BAB23FFFFF
$ echo '16o 9999999999999999999999 p' | dc
21E19E0C9BAB23FFFFF
Przy obsługiwanych podstawach od 2 do pewnej liczby wymaganej przez POSIX do co najmniej tak wysokiej, jak 99. W przypadku zasad większych niż 16, cyfry większe niż 9 są reprezentowane jako oddzielone spacjami liczby dziesiętne uzupełnione zerami.
$ echo 'obase=30; 123456' | bc
04 17 05 06
Lub to samo z dc
( bc
kiedyś (i nadal jest w niektórych systemach) otoką dc
):
$ echo 30o123456p | dc
04 17 05 06