Я много работаю с программным обеспечением для сети и последовательной связи, поэтому мне часто необходимо иметь код для отображения или регистрации шестнадцатеричных дампов пакетов данных.
Каждый раз, когда я это делаю, я пишу еще одну процедуру шестнадцатеричного дампа с нуля. Я собираюсь сделать это снова, но решил, что спрошу здесь: есть ли где-нибудь хороший бесплатный шестнадцатеричный код дампа для C++?
Особенности, которые мне бы хотелось:
Редактировать: Пояснение: я ищу код, который я могу легко добавить в свои собственные программы для записи в stderr, stdout, файлы журнала или другие подобные потоки вывода. Я не ищу утилиту шестнадцатеричного дампа командной строки.





Не могли бы вы написать свой собственный диссектор для Wireshark?
Обновлено: написано до точности в вопросе
Я видел, как PSPad использовался как шестнадцатеричный редактор, но обычно я делаю то же самое, что и вы. Я удивлен, что на этот вопрос нет «мгновенного ответа». Это очень распространенная потребность.
xxd - это стандартная утилита шестнадцатеричного дампа, которая, похоже, должна решить ваши проблемы.
Инструмент 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.
Я часто использую этот небольшой фрагмент, который написал много лет назад. Это коротко и легко добавить в любом месте при отладке и т. д.
#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");
}
}
printf ("% 02x", (без знака) (buf [i + j]));
Я использовал это в одном из моих внутренних инструментов на работе.
На всякий случай кому-то это пригодится ...
Я нашел реализацию единственной функции для ascii / hex dumper в этом ответе.
Версию C++, основанную на том же ответе с терминальными цветами ANSI, можно найти здесь.
Более легкий, чем xxd.
идеально! это качает. Я использую считыватель сокетов и вызвал функцию с помощью «hexdump (buffer, bytecount)»; и это работает как шарм! Спасибо!