Werkzeug zum Konvertieren einer HEX-Datei in einen ASCII-Zeichensatz?

45882
Aaron

Frage:

  • Gibt es ein bekanntes Werkzeug zum Konvertieren einer Datei, die aus 2 Byte Hex in ASCII besteht ?

Hinweis: - Dateilagerliste in Bytes pflegen

Beispiel:

Dateiinhalt:

00000000 0054 0065 0073 0074 0020 0054 0065 0073 00000008 0074 0020 0054 0065 0073 0074 0020 0054 00000016 0065 0073 0074 0020 0054 0065 0073 0074 00000024 0020 0054 0065 0073 0074 0020 0054 0065 00000032 0073 0074 0020 0054 0065 0073 0074 0020 00000040 0054 0065 0073 0074 000a 0054 0065 0073 00000048 0074 0020 0054 0065 0073 0074 0020 0054 00000056 0065 0073 0074 0020 0054 0065 0073 0074 00000064 0020 0054 0065 0073 0074 0020 0054 0065 

Erwartete Ausgabe

00000016 0065 0073 0074 0020 0054 0065 0073 0074 |est Test Test Te| 00000032 0073 0074 0020 0054 0065 0073 0074 0020 |st Test Test.Tes| 00000048 0074 0020 0054 0065 0073 0074 0020 0054 |t Test Test Test| 00000064 0020 0054 0065 0073 0074 0020 0054 0065 | Test Test Test | 
2

3 Antworten auf die Frage

5
Dennis Williamson

Ihre Eingabedatei sieht folgendermaßen aus:

hexdump -e '"%08_ad " 8/1 "%04x "' -e '"" 0/0 "" "\n"' original_file 

xxd -rDezimale Offsets können leider nicht verarbeitet werden.

Hier ist ein kurzes Gnu AWK-Programm, mit dem Sie die Ausgabe erhalten, die Sie suchen:

gawk '; printf "|\n"}' input_file 

Wenn Sie einen anderen AWK als verwenden gawk, können Sie die strtonum()Funktion hier verwenden .

Hier ist eine andere Möglichkeit, das gleiche wie das gawkobige Skript auszuführen:

cut -c 11- input_file | sed 's/\<00//g' | xxd -r -p | hexdump -e '"%08_ad " 8/1 "%04x " ""' -e '" |" 8/1 "%_p" "|\n"' 

Wenn Sie Ihre Eingabedatei stattdessen in Text konvertieren möchten:

cut -c 11- input_file | xxd -r -p 
@ Aaron: Ich habe ein paar zusätzliche Informationen hinzugefügt. Dennis Williamson vor 13 Jahren 0
Hatte einen etwas anderen Anwendungsfall für die manuelle Ausgabe einzelner Zeichen, nur an der Eingabeaufforderung, und benutzte einfach folgendes: `echo '0x32' | xxd -r`. Habe bei der Verwendung von "-p" noch keinen Unterschied für einzelne oder mehrere Zeichen gefunden. Pysis vor 6 Jahren 0
4
Ignacio Vazquez-Abrams
iconv -f utf-16be -t ascii input.txt 
`iconv` ist mit Mac OS X vorinstalliert :), ignorieren Sie diese Lösung daher nicht, um Ihre Aufmerksamkeit auf einen Paketmanager zu lenken. Sridhar-Sarnobat vor 8 Jahren 0
1
asoundmove

Um 0x00 zu entfernen, können Sie unter Unix Folgendes verwenden:

tr -d '\0' 

Zur Anzeige können Sie den Objektauszug (od) verwenden und die Ausgabe filtern.

od -w$1 -v -t x1a $2 

Dadurch erhalten Sie die Rohausgabe, die Sie dann mit awk (oder einem anderen Skript) filtern können.

od -w$1 -v -t x1a $2 | awk '$0~/^[0-9A-Fa-f]/ ; printf " "; next} ; printf "\n"}' 

Ersetzen Sie $ 2 durch die Anzahl der angezeigten Bytes. Gibt Ihnen den ersten Schritt, dann müssen Sie jedes zweite Byte (0x00) filtern.

Ich hoffe das hilft.

Das folgende Beispiel ist auf einer einfachen ASCII-Datei, aber dies wäre bei einer 2-Byte-Datei sehr ähnlich.

00000000 23 21 2f 62 69 6e 2f 73 68 0d 0a 0d 0a 23 20 6f |#!/bin/sh....# o| 00000010 64 20 2d 77 24 31 20 2d 76 20 2d 74 20 78 31 61 |d -w$1 -v -t x1a| 00000020 20 24 32 20 7c 20 61 77 6b 20 27 24 30 7e 2f 5e | $2 | awk '$0~/^| 00000030 5b 30 2d 39 41 2d 46 61 2d 66 5d 2f 20 7b 70 72 |[0-9A-Fa-f]/ ' || 00000060 20 73 65 64 20 27 73 2f 5e 5b 30 2d 39 61 2d 66 | sed 's/^[0-9a-f| 00000070 41 2d 46 5d 2a 5b 20 09 5d 2a 2f 2f 27 20 7c 20 |A-F]*[ .]*//' | | 00000080 73 65 64 20 27 73 2f 5b 20 09 5d 5b 20 09 5d 2a |sed 's/[ .][ .]*| 00000090 2f 09 2f 67 27 0d 0a 6f 64 20 2d 77 24 31 20 2d |/./g'..od -w$1 -| 000000a0 76 20 2d 74 20 78 31 61 20 24 32 20 7c 20 61 77 |v -t x1a $2 | aw| 000000b0 6b 20 27 24 30 7e 2f 5e 5b 30 2d 39 41 2d 46 61 |k '$0~/^[0-9A-Fa| 000000c0 2d 66 5d 2f 20 7b 66 6f 72 20 28 69 3d 32 3b 20 |-f]/ ; printf " | 00000110 22 3b 20 6e 65 78 74 7d 20 7b 66 6f 72 20 28 69 |"; next} ; pr| 00000160 69 6e 74 66 20 22 5c 6e 22 7d 27 0d 0a |intf "\n"}'..| 0000016d 
Kannst du ein Beispiel geben? Aaron vor 13 Jahren 0
Es sieht so aus, als hätte ignacio eine viel einfachere Lösung bekommen ... asoundmove vor 13 Jahren 0