18

http://play.golang.org/p/BoZkHC8_uA

我想将 uint8 转换为字符串,但不知道如何。

  package main

  import "fmt"
  import "strconv"

  func main() {

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

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

这给了我prog.go:11: cannot use str[1] (type uint8) as type int in function argument [process exited with non-zero status]

任何想法?

4

5 回答 5

28

只需转换它

    fmt.Println(strconv.Itoa(int(str[1])))
于 2013-10-07T11:11:34.090 回答
10

转换它或转换它是有区别的,请考虑:

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'
在 play.golang.org 中查看此代码
于 2015-08-19T08:17:07.580 回答
7

您可以通过使用强制转换来更简单地完成它,这对我有用:

var c uint8
c = 't'
fmt.Printf(string(c))
于 2014-02-03T05:24:24.053 回答
0

Go 表达式中没有基本类型的自动转换。请参阅https://talks.golang.org/2012/goforc.slide#18。A byte(的别名uint8)或[]byte[]uint8)必须设置为布尔值、数字或字符串。

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”。您可以使用 . 将任何 int 类型转换为字符串Sprintf。请参阅https://stackoverflow.com/a/41074199/12817546

但是Sprintf使用反射。请参阅https://stackoverflow.com/a/22626531/12817546中的评论。使用Itoa(Integer to ASCII) 更快。请参阅@DenysSéguret 和https://stackoverflow.com/a/38077508/12817546。行情已编辑。

于 2020-07-04T05:24:17.547 回答
-1

利用%c

    str := "Hello"
    fmt.Println(str[1]) // 101
    fmt.Printf("%c\n", str[1])
于 2020-07-17T03:08:54.637 回答