Czego mogę użyć w skrypcie powłoki UNIX do konwersji liczb dziesiętnych na szesnastkowe? Myślałem, że od to załatwi, ale nie zdaje sobie sprawy, że karmię go reprezentacjami liczb w ASCII.
printf? Obrzydliwy! Używam go na razie, ale co jeszcze jest dostępne?
Odpowiedzi:
Jeśli chcesz przefiltrować cały plik liczb całkowitych, po jednej w każdym wierszu:
źródło
ibase=16
. Możesz przeczytać podręcznik bc, aby uzyskać więcej informacji.Próbowałeś
printf(1)
?Prawdopodobnie istnieją sposoby na zrobienie tego za pomocą wbudowanych funkcji we wszystkich powłokach, ale byłoby to mniej przenośne. Nie sprawdzałem specyfikacji POSIX sh, aby zobaczyć, czy ma takie możliwości.
źródło
bc
jest. na przykład, przyjmując238862874857408875879219909679752457540
jako dane wejściowe, printf daje nam „Wynik za duży”. metoda BC sprawdza się świetnie w przypadku rzeczy większych niż standardowe int / long / bigintprintf "%X"
bc
nie jest dostępny wszędzie (przynajmniej nie w moim wbudowanym Linuksie).Szesnastkowy na dziesiętny:
Dziesiętny na szesnastkowy:
źródło
źródło
-v VAR
jest rozszerzeniem bash. Niewymienione na stronie podręcznika , ujawniane tylko wtedy, gdy dzwoni sięprintf
bez argumentówPrzepraszam, moja wina, spróbuj tego ...
Przykład:
źródło
printf
ihex
polecenia nie są dostępne.printf
nie jest dostępne?Próbować:
źródło
W
zsh
możesz zrobić coś takiego:Przykład zaczerpnięty ze
zsh
strony dokumentacji dotyczącej oceny arytmetycznej .Uważam, że Bash ma podobne możliwości.
źródło
W moim przypadku natknąłem się na jeden problem z użyciem rozwiązania printf:
$ printf "%x" 008 bash: printf: 008: invalid octal number
Najłatwiej było użyć rozwiązania z bc , sugerowanego w poście wyżej:
$ bc <<< "obase=16; 008" 8
źródło
źródło
źródło
To nie jest skrypt powłoki, ale jest to narzędzie CLI, którego używam do konwersji liczb między bin / oct / dec / hex:
źródło