将int转换为Go中的单个字节

时间:2016-05-13 12:42:38

标签: go

https://github.com/tarm/serial/blob/master/serial.go#L103

type StopBits byte
type Parity byte

type Config struct {
    Name        string
    Baud        int
    ReadTimeout time.Duration
    Size byte
    Parity Parity
    StopBits StopBits
}

我试图标记命令行并填写配置结构,但我无法弄清楚如何从int或字符串转到单个字节?

示例尺寸7

尝试

mysize := "7"
mysize[0]

但是tarm / serial告诉我serial.Config

中输入错误无效
i, err := strconv.Atoi("7")

编译器抱怨我不能i.(byte)

我能使其工作的唯一方法是在配置结构中硬编码size: 7

3 个答案:

答案 0 :(得分:13)

您只需将int转换为字节:https://play.golang.org/p/w0uBGiYOKP

val := "7"
i, _ := strconv.Atoi(val)
byteI := byte(i)
fmt.Printf("%v (%T)", byteI, byteI)
  

编译器抱怨我不能做。(字节)

当然,因为这是一个类型断言,如果i不是给定类型(在您的示例中为byte),它失败,或者它不是接口

答案 1 :(得分:4)

为了使用类型断言(你正在做),你需要在左边有一个接口。您可能会收到“左边非接口类型字节”的错误 - 这是真的,因为您已经知道了类型。相反,你应该施展。

你想要使用byte(i)而不是i。(byte):

i := 12
c := byte(i)
fmt.Println(c) //12

当你的int超过一个字节可以容纳的max int时要小心;你最终会溢出字节。在这种情况下,如果它超过255(单个字节可以容纳的最多),你就会溢出。

答案 2 :(得分:0)

    str := "Hello"
    var b byte
    for i,_ := range str{
        b = str[i]
        fmt.Println(b)
    }