2 回答
TA贡献1827条经验 获得超8个赞
发生的事情是您将字节(例如 127)直接传递到字符串中,并期望它在将其转换为字符串之前将该字节表示为整数 127。相反,它正在做的是将其解释为字节值为 127 的字符。
相反,您应该将该字节值转换为整数,然后使用strconv库将其格式化为字符串。
package main
import (
"fmt"
"strconv"
)
type IPAddr [4]byte
func (addr IPAddr) String() string {
return strconv.Itoa(int(addr[0])) + "." + strconv.Itoa(int(addr[1])) + "." + strconv.Itoa(int(addr[2])) + "." + strconv.Itoa(int(addr[3]))
}
func main() {
addrs := map[string]IPAddr{
"loopback": {127, 0, 0, 1},
"googleDNS": {8, 8, 8, 8},
}
for n, a := range addrs {
fmt.Printf("%v: %v\n", n, a)
}
}
输出:
loopback: 127.0.0.1
googleDNS: 8.8.8.8
TA贡献1864条经验 获得超2个赞
具有更少临时内存分配的更有效的实现:
func (addr IPAddr) String() string {
buf := make([]byte, 0, 3+1+3+1+3+1+3)
return string(
strconv.AppendInt(
append(
strconv.AppendInt(
append(
strconv.AppendInt(
append(
strconv.AppendInt(buf,
int64(addr[0]), 10), '.'),
int64(addr[1]), 10), '.'),
int64(addr[2]), 10), '.'),
int64(addr[3]), 10))
}
- 2 回答
- 0 关注
- 185 浏览
添加回答
举报