Was ist ein gutes Werkzeug, um ASCII in Binär und Binär in ASCII zu konvertieren?
Ich hatte gehofft auf etwas wie:
$ echo --binary "This is a binary message"
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
Oder realistischer:
$ echo "This is a binary message" | ascii2bin
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
Und auch das Gegenteil:
$ echo "01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101" | bin2ascii
This is a binary message
PS: Ich benutze Bash
PS2: Ich hoffe, ich habe nicht die falsche Binärdatei bekommen
echo
.Antworten:
-e expression
werten Sie den angegebenen Ausdruck alsperl
Code aus-p
:sed
mode. Der Ausdruck wird für jede Eingabezeile ausgewertet, wobei der Inhalt der Zeile in der$_
Variablen gespeichert und nach der Auswertung des Ausdrucks gedruckt wird .-l
: noch mehr wiesed
: Anstelle der vollständigen Zeile befindet sich nur der Inhalt der Zeile ($_
dh ohne Zeilentrennzeichen) in (und eine neue Zeile wird bei der Ausgabe wieder hinzugefügt). Dasperl -lpe code
funktioniert so,sed code
nur dass es sich umperl
Code im Gegensatz zused
Code handelt.unpack "B*"
$_
Arbeitet standardmäßig mit der Variablen und extrahiert ihren Inhalt als Bitfolge, die vom höchsten Bit des ersten Bytes zum niedrigsten Bit des letzten Bytes wandert.pack
macht das Gegenteil vonunpack
. Sieheperldoc -f pack
für weitere Einzelheiten.Mit Leerzeichen:
(Es wird davon ausgegangen, dass die Eingabe in 8-Bit-Blöcken (0-gepolstert) erfolgt.)
Mit
unpack "(B8)*"
extrahieren wir jeweils 8 Bits und verbinden die resultierenden Zeichenfolgen mit Leerzeichenjoin " "
.quelle
Sie können
xxd
zum Konvertieren von ASCII und Binär verwenden.Basen umwandeln
Wenn Sie nur Grundkonvertierungen zwischen Hex, Oktal und Dez vornehmen möchten, verwende ich normalerweise das grundlegende Befehlszeilentool (
bc
) des Taschenrechners , um solche Dinge zu tun. Beachten Sie, dassbc
die richtige Reihenfolge der Basen immer sehr wählerisch ist: Sie müssen zuerst die resultierende Base (obase
) angeben und dann Ihre Auswahl von hinzufügenibase
.quelle
xxd
wäre nett, außer es zeigt die erste nervige spalte und die basiseingabe am ende der zeile.awk
, um es loszuwerden, aber es scheint keine Schalter zu haben, um diese Anzeige zu deaktivieren.| awk '{print $2}'
. Es gibt auch andere Werkzeuge.od
&hexdump
. Ich suche nach einer anderen Methode, die diese verwendet.-p
Option, um 'reine' Ausgabe zu erhaltenxxd -b
Ansatz, den man jedoch nichtxxd
alleine verwenden kann, um Binärdaten wieder in ASCII umzuwandeln. Daher fürchte ich, Sie müssten so etwas wie verwendenprintf 'obase=16;ibase=2;%s\n' "$n" | bc | xxd -p -r
, wobei $ n die zu konvertierende Zahl entweder als lange Ziffernfolge oder als durch Semikolons getrennte Ziffernfolge enthält. Wenn Sie garantieren können, dass $ n in den arithmetischen Typ Ihrer Muscheln passt, können Sie mitprintf '%x\n' $((2#$n)) | xxd -p -r
Mit bc und bash:
quelle
Shell-Lösung zum Konvertieren von Binär in ASCII:
quelle
sed
,,tr
undbc
sind externe Programme, die im Shell-Skript aufgerufen werden.In Python
quelle
Verwendung von Python 3:
Gespeichert als "bin2ascii" zum Beispiel:
quelle
Kodierung von Binärdateien durch base64
Base64 entschlüsseln
quelle