为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
繁华开满天机 2023-07-31 10:56:23
func main() {     str := hex.EncodeToString([]byte("go"))     fmt.Println(str) }此代码返回676f. 如何打印类似 C 的内容0x67, 0x6f?
查看完整描述

2 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

我在模块中找不到任何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())


}


可运行示例: https: //goplay.space/#fyhDJ094GgZ


查看完整回答
反对 回复 2023-07-31
?
不负相思意

TA贡献1777条经验 获得超10个赞

这是一个产生问题中指定的结果的解决方案。具体来说,每个字节之间有一个“,”,并且没有尾随空格。


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 在这一步分配内存。


构建器的初始大小足以容纳每个字节和分隔符的表示。另一个答案忽略了分隔符的大小。


在 Go 游乐场上尝试一下



查看完整回答
反对 回复 2023-07-31
  • 2 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信