Wie konvertiere ich Dateidaten in Nur-Hex?

12651
Vi.

Wie konvertiere ich mühelos in / von einfachen maschinenlesbaren hexadezimalen Daten (ohne Auffüllung / Offsets / Zeichenansicht) mit xddoder hexdump?

Ich bin müde, einige spezielle Formatzeichenfolgen zu graben (und finde heraus, dass plötzlich Zeilen nach N-Zeichen umbrochen werden oder Zeilen übersprungen werden) oder jedes Mal Perl-Einzeiler geschrieben wird.

Warum ist es nicht so einfach wie base64/ base64 -d?

5
Weil es fast niemand braucht. Ignacio Vazquez-Abrams vor 12 Jahren 0
`base64` * umgibt * die Ausgabe standardmäßig. grawity vor 12 Jahren 1

3 Antworten auf die Frage

10
grawity
hexdump -e '"% x"' 
xxd -p | tr -d '\ n' 

Wenn Sie dies jedes Mal müde werden, erstellen Sie einen Alias .

Ich bin es leid, auf Manpage und Gettings zu schauen, die entweder verwirrt sind, entweder aus hexdumps Formt-Strings oder aus xxds "Postscript" -Ding. (Ist das "Postscript" etwas über Drucker oder über Buchstaben?) Vi. vor 12 Jahren 1
@Vi, betrachte -p als "einfach". Ich vermute, dass der Postscript-Kommentar darin besteht, dass die Postscript-Sprache Inline-Daten (normalerweise Bilder) erlaubt, die genau auf diese Weise codiert sind. Postscript-Programmierer können also mit xxd binäre Bilder in eine bequeme Form für das Einbetten in eine Postscript-Datei konvertieren. RedGrittyBrick vor 12 Jahren 2
Verwenden Sie für die Hexadezimalausgabe in Großbuchstaben mit `xxd` die Option` -u`. Peter Mortensen vor 6 Jahren 0
4
RedGrittyBrick

Einfache Konvertierung in / von einfachen maschinenlesbaren Hexadezimaldaten

In Kürze.

$ xxd -plain test.txt> test.hex $ xxd -plain -revert test.hex test2.txt $ diff test.txt test2.txt $ 

Erläuterung:

$ xxd -plain test.txt > test.hex 

Dies schreibt eine Hex-Kodierung der Daten in test.txt in die neue Datei test.hex. Die Option -poder -plainbewirkt, dass xxd ein "einfaches" Hex-Format ohne Leerzeichen zwischen den Ziffernpaaren (dh keine Leerzeichen zwischen Byte-Werten) verwendet. Dies wandelt "abc ABC" in "61626320414243" um. Ohne -pwürde er den Text in ein wortorientiertes 16-Bit-Hexdump-Format umwandeln, das zwar leichter lesbar, aber weniger kompakt und daher weniger als Übertragungsformat geeignet und etwas schwerer zu invertieren ist.

$ xxd -plain -revert text.hex test2.txt 

Dies verwendet die Option -roder -revertfür den Rückwärtsbetrieb. Die -plainOption wird erneut verwendet, um anzuzeigen, dass die Eingabe-Hex-Datei ein einfaches Format hat.

Ich mache den Ausgabedateiname anders als den Originaldateinamen, damit wir die Ergebnisse später mit der Originaldatei vergleichen können.

$ diff test.txt test2.txt $  

Der Befehl diff gibt nichts aus. Dies bedeutet, dass zwischen dem ursprünglichen und dem wiederhergestellten Inhalt der Datei kein Unterschied besteht.


Ich bin es leid, einige spezielle Formatketten zu graben

Verwenden Sie Alias- oder Deklarationsfunktionen in Ihrem .profile, um Mnemonics zu erstellen, damit Sie sich nicht in Manpages erinnern oder nach ihnen suchen müssen.

oder einfach daran erinnern -plainund -revert.


Umschlossene Ausgabe

Ja, die Ausgabe enthält neue Zeilen. Das willst du vermeiden. Mit der Option -coder können Sie -colsangeben, wie lange die Ausgabezeilen versuchen sollen, um Zeilenumbrüche der Ausgabe zu vermeiden. -c 0gibt die Standardlänge an und die Manpage schlägt vor, dass 256 das Limit ist, aber es scheint darüber hinaus zu funktionieren.

$ xxd -plain -cols 9999 test.txt > test.hex $ wc test.txt test.hex 121 880 4603 test.txt 1 1 9207 test.hex 

Der wcBefehl wordcount gibt an, wie viele Zeilen, Wörter und Zeichen sich in einer Datei befinden.

So wurden 121 Zeilen (880 Wörter, 4603 Bytes) ASCII-Text als eine Zeile mit Hex-Ziffern codiert.

(Übersprang die Option "-p" beim Lesen des Mannes wegen einer mysteriösen "Nachsatz" -Ding-Sache) Vi. vor 12 Jahren 0
Umschlossene Ausgabe Vi. vor 12 Jahren 0
@Vi: Ich verstehe. Was ist aus Neugier das Problem mit der verpackten Ausgabe (dh ein geringer Prozentsatz der möglicherweise überflüssigen LF-Zeichen)? RedGrittyBrick vor 12 Jahren 1
Es kann ein Problem sein, wenn hex in Konfigurationsdateien eingefügt wird, z. B. INIT = 01303031313102 CMD1 = 41414141FF000000. Vi. vor 12 Jahren 0
Können Sie ein wenig erläutern, was die 3 Befehlszeilen tun (indem Sie die Antwort bearbeiten)? Peter Mortensen vor 6 Jahren 0
@Peter. Ich habe das getan. RedGrittyBrick vor 6 Jahren 0
1
kenorb

Hier ist die Version mit odUtility (Teil des coreutilsPakets):

od -An < input | tr -dc '[:alnum:]'