func main() {
str := hex.EncodeToString([]byte("go"))
fmt.Println(str)
}
这段代码返回 676f
。如何以 C 语言风格打印出 0x67, 0x6f
?
func main() {
str := hex.EncodeToString([]byte("go"))
fmt.Println(str)
}
这段代码返回 676f
。如何以 C 语言风格打印出 0x67, 0x6f
?
我在hex
模块中没有找到能够实现你想要的功能的任何函数。但是,我们可以使用自定义缓冲区以我们想要的格式进行编写。
package main
import (
"bytes"
"fmt"
)
func main() {
originalBytes := []byte("go")
result := make([]byte, 4*len(originalBytes))
buff := bytes.NewBuffer(result)
for _, b := range originalBytes {
fmt.Fprintf(buff, "0x%02x ", b)
}
fmt.Println(buff.String())
}
p := []byte("go")
var buf strings.Builder
if len(p) > 0 {
buf.Grow(len(p)*6 - 2)
for i, b := range p {
if i > 0 {
buf.WriteString(", ")
}
fmt.Fprintf(&buf, "0x%02x", b)
}
}
result := buf.String()
strings.Builder类型用于避免在最终转换为字符串时分配内存。另一个答案使用的bytes.Buffer会在此步骤中分配内存。
初始时,构建器的大小足够大,以容纳每个字节和分隔符的表示形式。另一个答案忽略了分隔符的大小。