Off-the-Shelf C++ Hex Dump Code

前端 未结 7 1909
走了就别回头了
走了就别回头了 2020-12-05 15:05

I work a lot with network and serial communications software, so it is often necessary for me to have code to display or log hex dumps of data packets.

Every time I

相关标签:
7条回答
  • 2020-12-05 15:22

    Could you write your own dissector for Wireshark?

    Edit: written before the precision in the question

    0 讨论(0)
  • 2020-12-05 15:26

    I have seen PSPad used as a hex editor, but I usually do the same thing you do. I'm surprised there's not an "instant answer" for this question. It's a very common need.

    0 讨论(0)
  • 2020-12-05 15:27

    The unix tool xxd is distributed as part of vim, and according to http://www.vmunix.com/vim/util.html#xxd, the source for xxd is ftp://ftp.uni-erlangen.de:21/pub/utilities/etc/xxd-1.10.tar.gz. It was written in C and is about 721 lines. The only licensing information given for it is this:

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

    The unix tool hexdump is available from http://gd.tuwien.ac.at/softeng/Aegis/hexdump.html. It was written in C and can be compiled from source. It's quite a bit bigger than xxd, and is distributed under the GPL.

    0 讨论(0)
  • 2020-12-05 15:28

    xxd is the 'standard' hex dump util and looks like it should solve your problems

    0 讨论(0)
  • 2020-12-05 15:30

    I often use this little snippet I've written long time ago. It's short and easy to add anywhere when debugging etc...

    #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");
      }
    }
    
    0 讨论(0)
  • 2020-12-05 15:30

    Just in case someone finds it useful...

    I've found single function implementation for ascii/hex dumper in this answer.

    A C++ version based on the same answer with ANSI terminal colours can be found here.

    More lightweight than xxd.

    0 讨论(0)
提交回复
热议问题