Go 中如何将字节数组转换为字符串数组?

实现由四个字节数组组成的类型String()的方法。IPAddr到目前为止我已经尝试过:

package main


import (

    "fmt"

    "strings"

)


type IPAddr [4]byte


func (ipaddr IPAddr) String() string {

    ipaddrStrings := make([]string, 4)

    for i, b := range ipaddr {

        ipaddrStrings[i] = string(b)

    }

    return strings.Join(ipaddrStrings, ".")

}


func main() {

    hosts := map[string]IPAddr{

        "loopback":  {127, 0, 0, 1},

        "googleDNS": {8, 8, 8, 8},

    }

    for name, ip := range hosts {

        fmt.Printf("%v: %v\n", name, ip)

    }

}

然而,这打印


loopback: ...

googleDNS:.

这会导致


cannot convert ipaddr (type IPAddr) to type string

我怎样才能完成这个练习?


子衿沉夜
浏览 162回答 3
3回答

开满天机

添加这个方法:func (a IPAddr) String() string {     return fmt.Sprintf("%d.%d.%d.%d", a[0], a[1], a[2], a[3]) }

慕田峪7331174

string(b)尝试strconv.Itoa(int(b))将数值转换为字符串,而不是。

德玛西亚99

我独立地提出了与bserdar概述相同的解决方案:package mainimport (    "fmt"    "strconv"    "strings")type IPAddr [4]bytefunc (ipaddr IPAddr) String() string {    ipaddrStrings := make([]string, 4)    for i, b := range ipaddr {        ipaddrStrings[i] = strconv.Itoa(int(b))    }    return strings.Join(ipaddrStrings, ".")}func main() {    hosts := map[string]IPAddr{        "loopback":  {127, 0, 0, 1},        "googleDNS": {8, 8, 8, 8},    }    for name, ip := range hosts {        fmt.Printf("%v: %v\n", name, ip)    }}这打印:loopback: 127.0.0.1googleDNS: 8.8.8.8
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go