Was kann ich in einem UNIX-Shell-Skript verwenden, um Dezimalzahlen in Hexadezimalzahlen umzuwandeln? Ich dachte, od würde den Trick machen, aber es ist nicht klar, dass ich es mit ASCII-Darstellungen von Zahlen füttere.
printf? Brutto! Verwenden Sie es jetzt, aber was ist noch verfügbar?
Antworten:
Wenn Sie eine ganze Datei mit ganzen Zahlen filtern möchten, eine pro Zeile:
quelle
ibase=16
. Vielleicht möchten Sie das Handbuch auf bc für weitere Details lesen .Versucht
printf(1)
?Es gibt wahrscheinlich Möglichkeiten, dies mit eingebauten Funktionen in allen Shells zu tun, aber es wäre weniger portabel. Ich habe die POSIX sh-Spezifikationen nicht überprüft, um festzustellen, ob sie über solche Funktionen verfügen.
quelle
bc
ist. Wenn Sie beispielsweise238862874857408875879219909679752457540
printf als Eingabe verwenden, erhalten Sie "Ergebnis zu groß". Die BC-Methode eignet sich hervorragend für Dinge, die größer als ein Standard-Int / Long / Bigint sindprintf "%X"
bc
ist nicht überall verfügbar (zumindest nicht unter meinem eingebetteten Linux).Hexidezimal bis Dezimal:
Dezimal bis hexadezimal:
quelle
quelle
-v VAR
ist eine Bash-Erweiterung. Nicht in der Manpage erwähnt , nur enthüllt, wenn manprintf
ohne Argumente anruftEntschuldigung, meine Schuld, versuchen Sie das ...
Beispiel:
quelle
printf
undhex
Befehle sind nicht verfügbar.printf
nicht verfügbar?Versuchen:
quelle
In
zsh
können Sie so etwas tun:Beispiel aus der
zsh
Dokumentseite zur arithmetischen Auswertung .Ich glaube, Bash hat ähnliche Fähigkeiten.
quelle
In meinem Fall bin ich auf ein Problem bei der Verwendung der printf-Lösung gestoßen:
$ printf "%x" 008 bash: printf: 008: invalid octal number
Der einfachste Weg war die Verwendung einer Lösung mit bc , die in der höheren Veröffentlichung vorgeschlagen wurde:
$ bc <<< "obase=16; 008" 8
quelle
quelle
quelle
Dies ist kein Shell-Skript, aber es ist das CLI-Tool, mit dem ich Zahlen zwischen bin / oct / dec / hex konvertiere:
quelle