【问题标题】:Off-the-Shelf C++ Hex Dump Code现成的 C++ 十六进制转储代码
【发布时间】:2010-09-06 22:52:22
【问题描述】:

我经常使用网络和串行通信软件,因此我经常需要编写代码来显示或记录数据包的十六进制转储。

每次我这样做时,我都会从头开始编写另一个十六进制转储例程。我即将再次这样做,但我想我会在这里问:有没有什么好的免费的 C++ 十六进制转储代码?

我想要的功能:

  • 每行 N 个字节(其中 N 可以通过某种方式配置)
  • 可选的 ASCII/UTF8 转储在十六进制旁边
  • 可配置缩进、每行前缀、每行后缀等。
  • 最小的依赖(理想情况下,我希望代码都在头文件中,或者是我可以粘贴的 sn-p)

编辑: 澄清:我正在寻找可以轻松放入我自己的程序以写入标准错误、标准输出、日志文件或其他此类输出流的代码。我不是在寻找命令行十六进制转储实用程序。

【问题讨论】:

    标签: c++ logging hex hexdump


    【解决方案1】:

    您可以为 Wireshark 写下您的 own dissector 吗?

    编辑:写在问题的精度之前

    【讨论】:

      【解决方案2】:

      我看到PSPad 被用作十六进制编辑器,但我通常会做和你一样的事情。我很惊讶这个问题没有“即时答案”。这是一个非常普遍的需求。

      【讨论】:

        【解决方案3】:

        xxd 是“标准”十六进制转储工具,看起来应该可以解决您的问题

        【讨论】:

          【解决方案4】:

          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 下分发。

          【讨论】:

            【解决方案5】:

            我经常使用我很久以前写的这个小sn-p。调试等时在任何地方都可以轻松添加...

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

            【讨论】:

            • 完美!这岩石。我正在使用套接字阅读器,并使用“hexdump(缓冲区,字节计数);”调用该函数它就像一个魅力!谢谢!
            • printf("%02x ", (unsigned)(buf[i+j]));
            【解决方案6】:

            I used this 在我工作的一个内部工具中。

            【讨论】:

              【解决方案7】:

              以防万一有人觉得它有用...

              我找到了 ascii/hex dumper in this answer 的单个函数实现。

              可以在here 找到基于相同答案和 ANSI 终端颜色的 C++ 版本。

              比 xxd 更轻量级。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2019-01-01
                • 2012-06-26
                • 1970-01-01
                • 2016-10-19
                • 1970-01-01
                • 2015-03-21
                • 2019-08-16
                相关资源
                最近更新 更多