Frage

Ich arbeite viel mit Netzwerk- und serieller Kommunikationssoftware, daher benötige ich häufig Code zum Anzeigen oder Protokollieren von Hex-Dumps von Datenpaketen.

Jedes Mal, wenn ich das mache, schreibe ich eine weitere Hex-Dump-Routine von Grund auf.Ich bin gerade dabei, es noch einmal zu tun, aber ich dachte, ich frage hier:Gibt es irgendwo einen guten kostenlosen Hex-Dump-Code für C++?

Funktionen, die ich gerne hätte:

  • N Bytes pro Zeile (wobei N irgendwie konfigurierbar ist)
  • optionaler ASCII/UTF8-Dump neben dem Hex
  • konfigurierbare Einrückung, Präfixe pro Zeile, Suffixe pro Zeile usw.
  • minimale Abhängigkeiten (idealerweise möchte ich, dass sich der gesamte Code in einer Header-Datei befindet oder ein Snippet ist, das ich einfach einfügen kann)

Bearbeiten: Klärung:Ich suche nach Code, den ich problemlos in meine eigenen Programme einfügen kann, um ihn in stderr, stdout, Protokolldateien oder andere Ausgabestreams zu schreiben.Ich suche kein Befehlszeilen-Hex-Dump-Dienstprogramm.

War es hilfreich?

Lösung

Das Unix-Tool xxd wird als Teil von verteilt vim, und entsprechend http://www.vmunix.com/vim/util.html#xxd, die Quelle für xxd ist ftp://ftp.uni-erlangen.de:21/pub/utilities/etc/xxd-1.10.tar.gz.Es wurde in C geschrieben und umfasst etwa 721 Zeilen.Die einzigen dafür angegebenen Lizenzinformationen sind diese:

* Distribute freely and credit me,
* make money and share with me,
* lose money and don't ask me.

Das Unix-Tool hexdump ist erhältlich bei http://gd.tuwien.ac.at/softeng/Aegis/hexdump.html.Es wurde in C geschrieben und kann aus dem Quellcode kompiliert werden.Es ist um einiges größer als xxd und wird unter der GPL vertrieben.

Andere Tipps

Ich verwende oft diesen kleinen Ausschnitt, den ich vor langer Zeit geschrieben habe.Es ist kurz und einfach überall beim Debuggen usw. hinzuzufügen.

#include <ctype.h>
#include <stdio.h>

void hexdump(void *ptr, int buflen) {
  unsigned char *buf = (unsigned char*)ptr;
  int i, j;
  for (i=0; i<buflen; i+=16) {
    printf("%06x: ", i);
    for (j=0; j<16; j++) 
      if (i+j < buflen)
        printf("%02x ", buf[i+j]);
      else
        printf("   ");
    printf(" ");
    for (j=0; j<16; j++) 
      if (i+j < buflen)
        printf("%c", isprint(buf[i+j]) ? buf[i+j] : '.');
    printf("\n");
  }
}

Nur für den Fall, dass es jemand nützlich findet ...

Ich habe eine Einzelfunktionsimplementierung für den ASCII/Hex-Dumper gefunden in dieser Antwort.

Es gibt eine C++-Version, die auf derselben Antwort mit ANSI-Terminalfarben basiert Hier.

Leichter als xxd.

Ich habe gesehen PSPad Wird als Hex-Editor verwendet, aber ich mache normalerweise das Gleiche wie Sie.Ich bin überrascht, dass es auf diese Frage keine „sofortige Antwort“ gibt.Es ist ein sehr häufiges Bedürfnis.

Ich habe das verwendet in einem meiner internen Tools bei der Arbeit.

Könnten Sie Ihre schreiben? eigener Dissektor für Wireshark?

Bearbeiten:vor der Präzision in der Frage geschrieben

xxd ist das „Standard“-Hex-Dump-Dienstprogramm und scheint Ihre Probleme zu lösen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top