17

私はネットワークおよびシリアル通信ソフトウェアを頻繁に使用しているため、データパケットの16進ダンプを表示またはログに記録するためのコードが必要になることがよくあります。

これを行うたびに、さらに別の16進ダンプルーチンを最初から作成します。私は再びそうしようとしていますが、ここで尋ねると思いました:どこかにC ++用の良い無料の16進ダンプコードはありますか?

欲しい機能:

  • 1行あたりNバイト(Nはなんらかの方法で構成可能)
  • 16進数の横にあるオプションのASCII/UTF8ダンプ
  • 構成可能なインデント、行ごとのプレフィックス、行ごとのサフィックスなど。
  • 最小限の依存関係(理想的には、コードをすべてヘッダーファイルに含めるか、貼り付けるだけのスニペットにします)

編集: 明確化:stderr、stdout、ログファイル、またはその他のそのような出力ストリームに書き込むために、自分のプログラムに簡単にドロップできるコードを探しています。コマンドラインの16進ダンプユーティリティを探していません。

4

7 に答える 7

47

私はずっと前に書いたこの小さなスニペットをよく使用します。短くて、デバッグ時などにどこにでも簡単に追加できます...

#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");
  }
}
于 2008-08-27T10:35:45.167 に答える
6

unix ツールxxdは の一部として配布されており、 http:vim //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 ツールhexdumphttp://gd.tuwien.ac.at/softeng/Aegis/hexdump.htmlから入手できます。C で書かれており、ソースからコンパイルできます。xxd よりかなり大きく、GPL で配布されています。

于 2008-08-27T02:42:07.507 に答える
3

誰かがそれを便利だと思った場合に備えて...

この回答で ascii/hex ダンパーの単一関数の実装を見つけました。

ANSI 端末の色を使用した同じ回答に基づく C++ バージョンは、こちらにあります

xxdより軽量。

于 2013-09-27T09:13:22.007 に答える
1

PSPadが16進エディターとして使用されているのを見たことがありますが、私は通常、あなたと同じことをします。この質問に対する「即時の答え」がないことに驚いています。それは非常に一般的なニーズです。

于 2008-08-27T00:58:25.367 に答える
1

Wireshark用に独自のディセクタを作成できますか?

編集:質問の精度の前に書かれています

于 2008-08-27T00:35:06.233 に答える
1

私はこれを職場の社内ツールの 1 つで使用しました。

于 2008-08-27T19:40:44.327 に答える
0

xxdは「標準」の16進ダンプユーティリティであり、問​​題を解決するはずです。

于 2008-08-27T01:28:33.783 に答える