如何将 []byte 转换为 C 十六进制格式 0x...?

func main() {
    str := hex.EncodeToString([]byte("go"))
    fmt.Println(str)
}

此代码返回676f. 如何打印类似 C 的内容0x67, 0x6f


繁华开满天机
浏览 96回答 2
2回答

呼唤远方

我在模块中找不到任何hex可以实现您想要的功能。但是,我们可以使用自定义缓冲区以我们想要的格式写入。package mainimport (    "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())}可运行示例: https: //goplay.space/#fyhDJ094GgZ

不负相思意

这是一个产生问题中指定的结果的解决方案。具体来说,每个字节之间有一个“,”,并且没有尾随空格。p := []byte("go")var buf strings.Builderif 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 在这一步分配内存。构建器的初始大小足以容纳每个字节和分隔符的表示。另一个答案忽略了分隔符的大小。在 Go 游乐场上尝试一下。
打开App,查看更多内容
随时随地看视频慕课网APP