2015-05-18 98 views
8

我想將字符串解析爲go-lang中的整數。我發現它的問題是在文檔中的提到的語法如下:Golang將字符串轉換爲特定類型的int(int8,int16,int32,int64)

ParseInt(s string, base int, bitSize int) 

其中,s是要分析,base由字符串的前綴所隱含的字符串:基地16「0X」基地8爲「0」,否則爲10。

bitSize參數是我面臨的問題。根據文檔ParseInt,它指定了結果必須適合的整數類型。位大小0,8,16,32和64對應於int,int8,int16,int32和int64。

但對於所有的值,如0,8,16,32 & 64.我得到相同類型的返回值。即int64類型。

任何人都可以指出我錯過了什麼。

代碼:https://play.golang.org/p/F3LbUh_maY

回答

15

作爲每documentation

FUNC parseInt函數(一個或多個字符串,基部INT,bitSize INT)(ⅰINT64,ERR出錯)

parseInt函數總是不管怎麼回報int64。此外

的bitSize參數指定的整數型結果必須 融入

所以基本上你bitSize參數只告訴你要分析後應符合bitSize字符串值解析。如果沒有,超出範圍會發生。

如在此PlayGroundstrconv.ParseInt("192", 10, 8)(當你看到解析後的值會比int8最大值更大)。

如果你想將其解析到你需要的任何值,只需使用int8(i)之後(int8int16int32)。

P.S.,因爲你碰到這個話題如何轉換爲特定的intX,我想概述一下,它也可以轉換爲unsigned int

8

ParseInt總是返回int64,你需要將結果轉換到你想要的類型。當您傳遞32作爲第三個參數時,如果解析的值不適合int32,但是返回的類型始終爲int64,則會得到解析錯誤。

例如:

i, err := strconv.ParseInt("9207", 10, 32) 
if err != nil { 
    panic(err) 
} 
result := int32(i) 
fmt.Printf("Parsed int is %d\n", result)