我经常使用网络和串行通信软件,所以我经常需要代码来显示或记录数据包的十六进制转储。
每次这样做,我都要从头开始编写另一个十六进制转储例程。我正要再写一次,但我想我应该在这里问:有没有什么好的C++十六进制转储代码?
我喜欢的功能:
- 每行N字节(其中N是可配置的)
- 可选的ASCII/UTF8转储与十六进制一起
- 可配置缩进、每行前缀、每行后缀等。
- 最小的依赖性(理想情况下,我希望代码都在一个头文件中,或者是一个片段,我可以粘贴)
**编辑:**说明:我正在寻找代码,我可以很容易地下降到我自己的程序写入标准错误,标准输出,日志文件,或其他类似的输出流。我不寻找一个命令行十六进制转储实用程序。
7条答案
按热度按时间sbtkgmzw1#
我经常使用这个我很久以前写的小片段。它很短,很容易在调试时添加到任何地方。
字符串
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行。它给出的唯一许可信息是:字符串
unix工具
hexdump
可从http://gd.tuwien.ac.at/softeng/Aegis/hexdump.html获得。它是用C编写的,可以从源代码编译。它比xxd大得多,并且在GPL下分发。rlcwz9us3#
万一有人觉得有用...
我在这个答案中找到了ascurry/hex dumper的单一函数实现。
基于相同答案的C++版本,ANSI端子颜色为here。
比xxd更轻。
xtupzzrd4#
我见过PSPad被用作十六进制编辑器,但我通常和你做同样的事情。我很惊讶这个问题没有一个“即时答案”。这是一个非常普遍的需求。
lyr7nygr5#
I used this在我工作的一个内部工具中。
xiozqbni6#
你能为Wireshark编写自己的解析器吗?
编辑:写在问题之前的精确度
b5lpy0ml7#
xxd是标准的十六进制转储工具,看起来应该可以解决你的问题