如何使用缩进打印十六进制转储

问题描述

fmt.Println(hex.Dump([]byte{1,2,3,4,5,6,7,8,9,1,0}))

显示

00000000  01 02 03 04 05 06 07 08  09 00 01 02 03 04 05 06  |................|
00000010  07 08 09 00                                       |....|

如何在所有行的十六进制地址前添加缩进?喜欢

    00000000  01 02 03 04 05 06 07 08  09 00 01 02 03 04 05 06  |................|
    00000010  07 08 09 00                                       |....|

通过 \n 分割行,然后在每行之前缩进,但是有没有内置工具可以做到这一点?我尝试了 hex.Dumpertabwriter.NewWriter,但它们只是将缩进视为普通数据并与十六进制转储一起打印。

解决方法

hex.Dump() 返回一个格式化的字符串。如果您希望将其格式化为每行缩进,请将所有换行符替换为换行符 + 缩进(例如制表符)。加上在它的开头加上缩进,这样第一行也将被缩进(前面没有换行符)。

要替换,请使用 strings.ReplaceAll()

看这个例子:

s := hex.Dump([]byte{1,2,3,4,5,6,7,8,9,1,0})
fmt.Println(s)

s = "\t" + strings.ReplaceAll(s,"\n","\n\t")
fmt.Println(s)

输出(在 Go Playground 上尝试):

00000000  01 02 03 04 05 06 07 08  09 00 01 02 03 04 05 06  |................|
00000010  07 08 09 00 01 02 03 04  05 06 07 08 09 00 01 02  |................|
00000020  03 04 05 06 07 08 09 00                           |........|

    00000000  01 02 03 04 05 06 07 08  09 00 01 02 03 04 05 06  |................|
    00000010  07 08 09 00 01 02 03 04  05 06 07 08 09 00 01 02  |................|
    00000020  03 04 05 06 07 08 09 00                           |........|