现成的C++十六进制转储代码

cbeh67ev  于 2023-11-19  发布在  其他
关注(0)|答案(7)|浏览(85)

我经常使用网络和串行通信软件,所以我经常需要代码来显示或记录数据包的十六进制转储。
每次这样做,我都要从头开始编写另一个十六进制转储例程。我正要再写一次,但我想我应该在这里问:有没有什么好的C++十六进制转储代码?
我喜欢的功能:

  • 每行N字节(其中N是可配置的)
  • 可选的ASCII/UTF8转储与十六进制一起
  • 可配置缩进、每行前缀、每行后缀等。
  • 最小的依赖性(理想情况下,我希望代码都在一个头文件中,或者是一个片段,我可以粘贴)
    **编辑:**说明:我正在寻找代码,我可以很容易地下降到我自己的程序写入标准错误,标准输出,日志文件,或其他类似的输出流。我不寻找一个命令行十六进制转储实用程序。
sbtkgmzw

sbtkgmzw1#

我经常使用这个我很久以前写的小片段。它很短,很容易在调试时添加到任何地方。

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

字符串

3j86kqsm

3j86kqsm2#

unix工具xxd是作为vim的一部分分发的,根据http://www.videx.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下分发。

rlcwz9us

rlcwz9us3#

万一有人觉得有用...
我在这个答案中找到了ascurry/hex dumper的单一函数实现。
基于相同答案的C++版本,ANSI端子颜色为here
比xxd更轻。

xtupzzrd

xtupzzrd4#

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

lyr7nygr

lyr7nygr5#

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

xiozqbni

xiozqbni6#

你能为Wireshark编写自己的解析器吗?
编辑:写在问题之前的精确度

b5lpy0ml

b5lpy0ml7#

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

相关问题