Go语言 如何将uint8转换为string

2fjabf4q  于 2023-02-27  发布在  Go
关注(0)|答案(5)|浏览(511)

我想把uint8转换成字符串,但不知道怎么做。

package main

import "fmt"
import "strconv"

func main() {
    str := "Hello"
    fmt.Println(str[1])  // 101

    fmt.Println(strconv.Itoa(str[1]))
}

Example
这就是prog.go:11: cannot use str[1] (type uint8) as type int in function argument [process exited with non-zero status]
你知道吗?

o0lyfsai

o0lyfsai1#

只需转换即可:

fmt.Println(strconv.Itoa(int(str[1])))
dxpyg8gm

dxpyg8gm2#

转换它或强制转换它之间存在差异,请考虑:

var s uint8 = 10
fmt.Print(string(s))
fmt.Print(strconv.Itoa(int(s)))

字符串类型转换打印"\n“(换行符),字符串转换打印“10”。一旦你注意到两个变体的[]byte转换,差别就变得很明显了:

[]byte(string(s)) == [10] // the single character represented by 10
[]byte(strconv.Itoa(int(s))) == [49, 48] // character encoding for '1' and '0'

see this code in play.golang.org

wsxa1bj1

wsxa1bj13#

你可以通过使用铸造来做得更简单,这对我很有效:

var c uint8
c = 't'
fmt.Printf(string(c))
zqdjd7g9

zqdjd7g94#

Go语言表达式中没有基本类型的自动转换,参见https://talks.golang.org/2012/goforc.slide#18,byteuint8的别名)或[]byte[]uint8)必须设置为bool、number或string。

package main

import (
    . "fmt"
)

func main() {
    b := []byte{'G', 'o'}
    c := []interface{}{b[0], float64(b[0]), int(b[0]), rune(b[0]), string(b[0]), Sprintf("%s", b), b[0] != 0}
    checkType(c)
}

func checkType(s []interface{}) {
    for k, _ := range s {
        // uint8 71, float64 71, int 71, int32 71, string G, string Go, bool true
        Printf("%T %v\n", s[k], s[k])
    }
}

Sprintf("%s", b)可以用来把[]byte{'G', 'o' }转换成字符串“Go”。你可以用Sprintf把任何int类型转换成字符串。参见https://stackoverflow.com/a/41074199/12817546
但是Sprintf使用反射,参见https://stackoverflow.com/a/22626531/12817546中的注解,使用Itoa(整数到ASCII)更快,参见@DenysSéguret和https://stackoverflow.com/a/38077508/12817546

mgdq6dx1

mgdq6dx15#

使用%c

str := "Hello"
    fmt.Println(str[1]) // 101
    fmt.Printf("%c\n", str[1])

相关问题