如何将int32 Unicode转换为字符串

时间:2019-02-09 14:04:22

标签: go

我有一个函数,该函数以int32 slice格式逐行接收主机名列表。这是功能:

func HandlePipeList(targetsList []int32) {
    //Print output item by item
    for i := 0; i < len(targetsList); i++ {
        fmt.Printf("%c", targetsList[i])
    }
}

由于我已使用fmt将其转换为%c,因此它可以工作并正确打印主机名。 当我尝试将targetsList作为字符串传递给另一个函数时,就会出现我的问题。如何对targetsList进行相同的转换,以便将行作为字符串传递? (strconv.Itoa在这里无效)。

2 个答案:

答案 0 :(得分:1)

Go中的Unicode代码点是rune。 Go类型rune是Go类型int32的别名。


  

The Go Programming Language Specification

     

Numeric types

int32   the set of all signed 32-bit integers

rune    alias for int32
     

Conversions

     

与字符串类型之间的转换

     

将一段符文转换为字符串类型会产生一个字符串   各个符文值的串联转换为字符串。


使用string类型转换。例如,

package main

import (
    "fmt"
)

func main() {
    targetsList := []int32("Testing, testing, ...")

    str := string(targetsList)
    fmt.Println(str)
}

游乐场:https://play.golang.org/p/d-s0uLFl9MG

输出:

Testing, testing, ...

参考:The Go Blog: Strings, bytes, runes and characters in Go

答案 1 :(得分:0)

built-in rune type只是int32的别名,因此这与将[]rune转换为string时存在相同的问题。您可以使用类似strings.Builderhttps://godoc.org/strings#Builder)之类的东西来组装字符串:

func runesToString(l []int32) (string, error) {
    b := strings.Builder{}
    for _, n := range l {
        _, err := b.WriteRune(n)
        if err != nil {
            return "", err
        }
    }
    return b.String(), nil
}

https://play.golang.org/p/MEXzsamubp6有一个完整的工作示例。