質問

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

これを行うたびに、さらに別の 16 進ダンプ ルーチンを最初から作成します。またしようと思っているのですが、ここで質問させていただきます。C++ 用の無料の 16 進ダンプ コードはどこかにありますか?

欲しい機能:

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

編集: 説明:自分のプログラムに簡単にドロップして、stderr、stdout、ログ ファイル、またはその他の同様の出力ストリームに書き込むことができるコードを探しています。コマンドラインの 16 進ダンプ ユーティリティを探しているわけではありません。

役に立ちましたか?

解決

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

誰かが役立つと思った場合に備えて...

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

ANSI 端子の色を使用した同じ回答に基づく C++ バージョンを見つけることができます。 ここ.

xxdよりも軽量です。

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

これを使いました 職場の内部ツールの 1 つで。

あなたのことを書いていただけますか 自身の解剖者 Wireshark用ですか?

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top