如何使用缩进打印 hexdump

How to print hexdump with indent

fmt.Println(hex.Dump([]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 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() returns 格式化字符串。如果您希望它的格式类似于缩进每一行,请将所有换行符替换为换行符 + 缩进(例如制表符)。加上缩进到它的开头,这样第一行也将缩进(前面没有换行符)。

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

看这个例子:

s := hex.Dump([]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 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                           |........|