Сведения о вопросе

1234123213

13:35, 12th August, 2020

Теги

c++   logging   hex   hexdump    

Off-the-Shelf C++ Hex Дамп-Код

Просмотров: 527   Ответов: 7

Я много работаю с сетевым и последовательным программным обеспечением связи, поэтому мне часто необходимо иметь код для отображения или регистрации hex дампов пакетов данных.

Каждый раз, когда я делаю это, я пишу еще одну процедуру hex-dump с нуля. Я собираюсь сделать это снова, но решил спросить Здесь: есть ли где-нибудь хороший бесплатный код дампа hex для C++?

Особенности, которые я хотел бы:

  • N байт на строку (где N каким-то образом настраивается)
  • дополнительный дамп ASCII/UTF8 рядом с hex
  • настраиваемые отступы, префиксы для каждой строки, суффиксы для каждой строки и т. д.
  • минимальные зависимости (в идеале, я бы хотел, чтобы весь код был в заголовочном файле или был фрагментом кода, который я могу просто вставить)

Edit: уточнение: я ищу код, который я могу легко забросить в свои собственные программы для записи в stderr, stdout, файлы журналов или другие подобные выходные потоки. Я не ищу утилиту дампа командной строки hex.



  Сведения об ответе

PROGA

09:15, 3rd August, 2020

Я часто использую этот маленький фрагмент, который написал давным-давно. Он короткий и легко добавляется в любом месте при отладке и т.д...

#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");
  }
}


  Сведения об ответе

repe

07:06, 28th August, 2020

Инструмент unix xxd распространяется как часть vim , и согласно http://www.vmunix.com/vim/util.html#xxd, источником для xxd является ftp://ftp.uni-erlangen.de:21/pub/utilities/etc/xxd-1.10.tar.gz . Он был написан в C году и составляет около 721 строки. Единственная лицензионная информация, предоставленная для него, это:

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

Инструмент unix hexdump доступен от http://gd.tuwien.ac.at/softeng/Aegis/hexdump.html . Он был написан в C году и может быть скомпилирован из исходного кода. Он совсем немного больше, чем xxd, и распространяется под GPL.


  Сведения об ответе

dumai

07:24, 16th August, 2020

Просто на случай, если кто-то сочтет это полезным...

В этом ответе я нашел единственную реализацию функции для ascii/hex dumper .

Версию C++, основанную на том же ответе с ANSI terminal цветами, можно найти здесь .

Более легкий, чем xxd.


  Сведения об ответе

ITSME

19:18, 27th August, 2020

Не могли бы вы написать свой собственный диссектор для Wireshark?

Edit: написано до точности в вопросе


  Сведения об ответе

lats

21:06, 1st October, 2020

Я видел, как PSPad используется в качестве редактора hex, но обычно я делаю то же самое, что и вы. Я удивлен, что для этого вопроса нет "instant answer". Это очень распространенная потребность.


  Сведения об ответе

PIRLO

23:32, 17th August, 2020

Я использовал это в одном из своих внутренних инструментов на работе.


  Сведения об ответе

P_S_S

08:33, 27th August, 2020

xxd является утилитом дампа 'standard' hex и похоже, что он должен решить ваши проблемы


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться