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
那么为什么不使用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"。

