2016-05-13 54 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(最多一個字節可以容納),你會溢出。