2016-05-13 52 views
2

https://github.com/tarm/serial/blob/master/serial.go#L103int转换成一个字节围棋

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.Config

i, err := strconv.Atoi("7") 

编译器抱怨说,我不能这样做i.(byte)

我可以使它工作的唯一方法是很难代码size: 7在配置结构。

回答

8

你可以只是转换一个int为一个字节:https://play.golang.org/p/w0uBGiYOKP

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

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

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

3

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

你要使用字节(我),而不是我(字节):

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

要小心,当你有超过最大INT一个字节可以容纳一个int;你将最终溢出字节。在这种情况下,如果它超过了255(最多一个字节可以容纳),你会溢出。