Ich habe einen Kontext, in dem ich binär in hexadezimal und dezimal und umgekehrt in einem Shell-Skript konvertieren muss. Kann mir jemand ein Tool dafür vorschlagen?
shell-script
binary
arithmetic
Bangi
quelle
quelle
Antworten:
Es ist ziemlich einfach, die Konvertierung von Binary in Pure Bash (
echo
undprintf
Builtins) durchzuführen:Binär bis dezimal
Binär zu hexadezimal
Es ist etwas komplexer, mit bash allein zur Binärdatei zurückzukehren. Ich schlage vor, Sie sehen die anderen Antworten für Lösungen dafür.
quelle
printf '%x\n' 10
, zum Beispiel.printf %d
bin2dec?$(( ... ))
gibt schon ein dezimales ergebnis aus,echo
reicht.printf '%s\n' foo
statt ausecho
verschiedenen Gründen (meistens Portabilität), aus dem gleichen Grund verwende ich es hier nicht.echo
Funktion hat). Mein Fehler!Angenommen, mit binär meinen Sie binäre Daten wie in Daten mit einem möglichen Bytewert einschließlich 0 und nicht Basis-2-Zahlen:
Zum Konvertieren von binären,
od
(Standard),xxd
(kommt mitvim
) oderperl
‚sunpack
in den Sinn kommen.Nun, zu konvertieren zurück zu binär,
awk
(Standard),xxd -r
oderperl
‚spack
:Aus der dezimalen Ausgabe von
od -tu1
oderperl
über:Aus dem Hexa
perl
oderxxd -p
höher:quelle
Sie können bc dafür verwenden, indem Sie die Parameter
ibase
undobase
ändern:Der Trick ist, dass Sie über die Grundlagen explizit sein müssen. Wenn Ihre ibase 2 ist, dann wenn Sie Ihre obase auf 10 setzen, wird es nichts tun, da 10 in der Binärzahl 2 ist. Daher müssen Sie hexadezimale Notation verwenden.
Also binär zu dezimal wäre (achte darauf, dass obase A ist)
Binär zu Dezimal:
Binär zu Hex:
Wenn die Ausgabebasis
obase
zuerst geändert wird, sollte es einfacher sein:quelle
echo 'ibase=2;obase=F;1111
die sollte dezimal 15, also gleich. F in hex. Es wird als 10 ausgegeben, was der Basis 15 entspricht (Ziffern 0-E). Es ist auch einfacher , wenn Sie die obase angeben ersten , zum Beispiel:echo 'obase=16;ibase=2;1111'|bc
. Keine Verwirrung.ibase
, müssen Sie in dieser Basis Eingaben vornehmen, auch fürobase
. Also in deinem Beispiel wäreecho 'ibase=2;obase=10000;11110001011010'|bc
. Höre besser auf den Rat von Goldlöckchen und kehre die Reihenfolge um - erst einstellenobase
, dannibase
.Wenn Sie Zahlen von der Basis 2 in 10 oder 16 und zurück konvertieren möchten ,
bc
ist dies das Standardwerkzeug, das bereits von psarossy erwähnt wurde .Einige Shells wie
zsh
haben als Teil ihrer arithmetischen Expansionsoperatoren eine eingebaute Unterstützung für die Basiskonvertierung:und so weiter.
Beides
ksh93
undzsh
auch Unterstützung:Beachten Sie jedoch, dass beim Erweitern
$binary
ein2#
oder ein16#
Präfix (mit dem Sie den Strip ausführen können) angezeigt wird${binary#*#}
.ksh93
unterstützt auch:zu binär konvertieren.
quelle
Für die Verwendung von Binär zu Hexadezimal: Das xxd- Tool unter Linux und für die Verwendung von Binär zu Dezimal können Sie das qalculate-Tool verwenden.
Hilfe zu xxd type
xxd --help
oderman xxd
unter Linux.quelle
Sie können PHP verwenden:
Oder Perl:
Oder POSIX Awk svnpenn / stdlib :
quelle
Wie in der vorherigen Antwort erwähnt, können Sie in Bash unter Verwendung von echo und printf Binär zu Dezimal und Hexadezimal wie folgt vorgehen. Ich füge hier nur hinzu, wie man mit Pure Bash von Dezimal und Hex zu Binär konvertiert.
Binär zu Dezimal mit Echo
Binär zu Hexa-Dezimal mit printf
Ganzzahlige Dezimal-Binär-Konvertierung, bei der nur Bash verwendet wird
Wenn Sie nur Bash verwenden und Dezimalzahlen in Binärzahlen konvertieren möchten, können Sie dies folgendermaßen tun:
Kopieren Sie anschließend Folgendes, und fügen Sie es ein:
Und dann probieren Sie es aus, wo Sie gespeichert haben:
Ganzzahl muss hinzugefügt werden !!
Hexadezimal-Binär-Konvertierung nur mit Bash
In ähnlicher Weise hexadezimal zu binär, wie folgt, wenn nur bash verwendet wird:
Beispielsweise:
Verhexung muss übergeben werden:
quelle