簡體   English   中英

現有的C ++ Hex Dump Code

[英]Off-the-Shelf C++ Hex Dump Code

我使用網絡和串行通信軟件工作很多,因此我經常需要使用代碼來顯示或記錄數據包的十六進制轉儲。

每次我這樣做,我都會從頭開始編寫另一個hex-dump例程。 我將要再次這樣做,但我想在這里問:那里有什么好的C ++自由十六進制轉儲代碼嗎?

我想要的功能:

  • 每行N個字節(其中N以某種方式可配置)
  • 十六進制旁邊的可選ASCII / UTF8轉儲
  • 可配置的縮進,每行前綴,每行后綴等。
  • 最小的依賴關系(理想情況下,我希望所有代碼都在頭文件中,或者是我可以粘貼的代碼片段)

編輯:澄清:我正在尋找可以輕松插入我自己的程序的代碼,以寫入stderr,stdout,日志文件或其他此類輸出流。 我不是在尋找命令行十六進制轉儲實用程序。

我經常使用我很久以前寫過的這個小片段。 在調試等時,它可以簡單易用地添加到任何地方......

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

unix工具xxd作為vim一部分分發,根據http://www.vmunix.com/vim/util.html#xxd,xxx的源代碼是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下分發。

以防有人發現它有用......

在這個答案中找到了ascii / hex dumper的單一功能實現。

可以在此處找到基於與ANSI終端顏色相同答案的C ++版本。

比xxd更輕量級。

你能為Wireshark編寫自己的解剖器嗎?

編輯:在問題的精確度之前寫

我已經看到PSPad用作十六進制編輯器,但我通常會做同樣的事情。 我很驚訝這個問題沒有“即時回答”。 這是一個非常普遍的需求。

在我的一個內部工具中使用了它。

xxd是'標准'十六進制轉儲工具,看起來應該可以解決你的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM