Golang中如何将字节类型的127转换为字符串类型的"127"?

Golang中如何将字节类型的127转换为字符串类型的"127"?

func main() {
    fmt.Println("hello world")
}

各位Gopher们好!

我正在学习Go语言教程,但在某个练习中遇到了困难。

在接口教程中,我们需要为某个类型添加Stringer接口的支持。这个类型是一个字节数组(var IPAddr [4]byte)。

我正确地定义了带有适当值接收器的方法,在String函数体中,我遍历接收器参数中的字节,并将它们逐个追加到我创建的字节切片中。在每个字节之后,我还插入了byte(’.’)(这个练习的目的是让IPAddr能够将例如{127, 1, 1, 0}打印为"127.1.1.0")。最后,我返回字节切片的string()转换。

我知道代码可以运行,但输出结果并不符合我的期望。

问题似乎在于,切片中的字节被转换成了对应编码下的字符,而不是对应字节值数字的字符。

如果有人能指点如何处理这个问题,我将非常感激!


更多关于Golang中如何将字节类型的127转换为字符串类型的"127"?的实战教程也可以访问 https://www.itying.com/category-94-b0.html

7 回复

那么为什么不使用fmt包中的Sprintf呢?

更多关于Golang中如何将字节类型的127转换为字符串类型的"127"?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


提示:使用 strconv 包。

当然,Sprintf 看起来很棒!

谢谢 Curtis。

你好 Curtis,

这是给你的链接 😉

我想看看你的代码,了解你在做什么。这是我的Go Playground示例:https://play.golang.org/p/uG2wjYbdkOf

你好 Chris,

我确实尝试使用了 strconv 包中的 Itoa 函数,具体代码在这里

稍后会尝试看看是否能用例如 for 循环使其更加优雅。

谢谢!

显然,任何改进/提示/建议都非常欢迎!

func main() {
    fmt.Println("hello world")
}

要解决将字节值转换为对应的数字字符串的问题,可以使用strconv.Itoa()函数将字节转换为字符串。由于字节是uint8类型,可以直接传递给strconv.Itoa(),它会将数字值转换为对应的字符串表示。

以下是修改后的示例代码:

package main

import (
    "fmt"
    "strconv"
    "strings"
)

type IPAddr [4]byte

// 为IPAddr类型实现Stringer接口
func (ip IPAddr) String() string {
    parts := make([]string, len(ip))
    for i, b := range ip {
        parts[i] = strconv.Itoa(int(b))
    }
    return strings.Join(parts, ".")
}

func main() {
    addrs := map[string]IPAddr{
        "loopback":  {127, 0, 0, 1},
        "googleDNS": {8, 8, 8, 8},
    }
    for name, ip := range addrs {
        fmt.Printf("%v: %v\n", name, ip)
    }
}

输出:

loopback: 127.0.0.1
googleDNS: 8.8.8.8

关键点:

  • 使用strconv.Itoa(int(b))将每个字节值转换为对应的数字字符串
  • 使用strings.Join()方法将字符串片段用"."连接起来
  • 避免了直接将字节转换为字符串时出现的编码问题

这样就能正确地将字节数组{127, 0, 0, 1}转换为字符串"127.0.0.1"

回到顶部