Código de volcado hexadecimal de C++ fuera de la estantería
logging hexdump (7)
A menudo uso este pequeño fragmento que escribí hace mucho tiempo. Es corto y fácil de agregar en cualquier lugar cuando se depura, etc.
#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");
}
}
Trabajo mucho con el software de comunicaciones en serie y en red, por lo que a menudo es necesario que tenga código para mostrar o registrar vuelcos hexadecimales de paquetes de datos.
Cada vez que hago esto, escribo otra rutina de volcado hexadecimal desde cero. Estoy a punto de hacerlo nuevamente, pero pensé que podría preguntar aquí: ¿hay algún buen código de volcado hexadecimal gratis para C ++ en alguna parte?
Características que me gustaría:
- N bytes por línea (donde N es de alguna manera configurable)
- volcado opcional ASCII / UTF8 junto con el hex.
- sangría configurable, prefijos por línea, sufijos por línea, etc.
- dependencias mínimas (idealmente, me gustaría que el código esté en un archivo de encabezado, o ser un fragmento que pueda pegar)
Editar: Aclaración: estoy buscando un código que pueda agregar fácilmente a mis propios programas para escribir en stderr, stdout, archivos de registro u otras transmisiones de salida. No estoy buscando una utilidad de volcado hexadecimal de línea de comandos.
He visto PSPad usado como editor hexadecimal, pero normalmente hago lo mismo que tú. Me sorprende que no haya una "respuesta instantánea" para esta pregunta. Es una necesidad muy común.
Usé esto en una de mis herramientas internas en el trabajo.
xxd es la utilidad de volcado hexadecimal ''estándar'' y parece que debería resolver tus problemas
La herramienta unix xxd
se distribuye como parte de vim
y, de acuerdo con http://www.vmunix.com/vim/util.html#xxd , la fuente de xxd es ftp://ftp.uni-erlangen.de:21 /pub/utilities/etc/xxd-1.10.tar.gz . Fue escrito en C y tiene alrededor de 721 líneas. La única información de licencia otorgada es la siguiente:
* Distribute freely and credit me,
* make money and share with me,
* lose money and don''t ask me.
La herramienta hexdump
está disponible en http://gd.tuwien.ac.at/softeng/Aegis/hexdump.html . Fue escrito en C y se puede compilar desde la fuente. Es bastante más grande que xxd y se distribuye bajo la GPL.
¿Podrías escribir tu propio disector para Wireshark?
Editar: escrito antes de la precisión en la pregunta
En caso de que alguien lo encuentre útil ...
He encontrado la implementación de una sola función para dumper ascii / hex en esta respuesta .
Aquí puede encontrar una versión de C ++ basada en la misma respuesta con colores de terminal ANSI.
Más ligero que xxd.