定制hexdump的打印输出格式

背景

hexdump是Linux系统下一个以十六进制或ASCII形式输出文件内容的工具,通常-b -c -C -d等选项提供的打印格式就够用了,但有时板卡输出的数据格式比较特殊,想用文本比较工具(例如kidff3)比对的话,就需要将hexdump的输出指定成匹配的格式

自定义格式串

通常使用-e选项传递自定义格式串。

简介

hexdump的自定义格式串由任意多个格式单元组成
每个格式单元由3个基本元素组成:

  1. 迭代数
  2. 字节数
  3. 模式串

模式串

这个是最好理解的,跟printf的模式串非常像,%d表示打印十进制整数%x表示打印十六进制整数,等等。

字节数

模式串对应的字节数,例如%c对应1%08x对应4

迭代数

这个比较难理解,其实就是代表模式串重复多少次

注意

每个格式单元前都要有-e选项,当你的输出格式比较复杂,一个格式单元hold不住时,可以将多个格式单元组合起来

格式示例

hexdump -v -e '4/4 "%08X "' -e '"\n"' bin.o
  1. -v选项表示不精简重复内容
  2. 第一个-e表示4个迭代、每次迭代解析4字节内容、每个4字节按模式串"%08X "打印
  3. 第二个-e没有迭代数也没有字节数,仅仅是个模式串"\n"来让每个迭代都输出换行
  4. bin.o是输入文件,一般是导出的二进制数据

上面命令的输出:

464C457F 00010102 00000000 00000000
003E0001 00000001 00000000 00000000
00000000 00000000 0000D2D0 00000000
00000000 00000040 00400000 0025002A
000000E8 89485500 0FC35DE5 0000441F
000000E8 C0315500 5DE58948 001F0FC3
000000E8 85485500 F28948F6 00058B48
48000000 4853E589 00D09F8B 19740000
40B08D48 48000001 8548028B 480A74F6
0574C085 000000E8 54438B00 BA504339

总结

hexdump非常适合用来格式化输出buffer内容,是调试驱动的利器。

你可能感兴趣的:(linux软件,驱动开发,linux,hexdump)