golang中的標準庫strconv
strconv 包
strconv包實現了基本資料型別與其字串表示的轉換,主要有以下常用函式: Atoi()、Itia()、parse系列、format系列、append系列。
string與int型別轉換
這一組函式是我們平時程式設計中用的最多的。
Atoi()
Atoi()函式用於將字串型別的整數轉換為int型別,函式簽名如下。
func Atoi(s string) (i int, err error)
如果傳入的字串引數無法轉換為int型別,就會返回錯誤。
func main() { a := "123456" ret, _ := strconv.Atoi(a) fmt.Fprintf(os.Stdout, "%v:%T\n", ret, ret) // 123456:int b := "abc123" ret2, _ := strconv.Atoi(b) fmt.Fprintf(os.Stdout, "%v:%T\n", ret2, ret2) // 0:int }
結論:Atoi(),如果轉換成功結果就是正常的數值,如果轉換失敗,結果就是0
Itoa
Itoa()函式用於將int型別資料轉換為對應的字串表示,具體的函式簽名如下。
func Itoa(i int) string
func main() {
a := 123456
ret := strconv.Itoa(a)
fmt.Printf("%v:%T", ret, ret) // 123456:string
}
a的典故
【擴充套件閱讀】這是C語言遺留下的典故。C語言中沒有string型別而是用字元陣列(array)表示字串,所以Itoa對很多C系的程式設計師很好理解。
Parse系列函式
Parse類函式用於轉換字串為給定型別的值:ParseBool()、ParseFloat()、ParseInt()、ParseUint()。
ParseBool()
func ParseBool(str string) (value bool, err error)
返回字串表示的bool值。它接受1、0、t、f、T、F、true、false、True、False、TRUE、FALSE;否則返回錯誤。
func main() {
bo, err := strconv.ParseBool("adsb123")
fmt.Println(bo, err) // false strconv.ParseBool: parsing "adsb123": invalid syntax
}
ParseInt()
func ParseInt(s string, base int, bitSize int) (i int64, err error)
返回字串表示的整數值,接受正負號。
base指定進位制(2到36),如果base為0,則會從字串前置判斷,”0x”是16進位制,”0”是8進位制,否則是10進位制;
bitSize指定結果必須能無溢位賦值的整數型別,0、8、16、32、64 分別代表 int、int8、int16、int32、int64;
返回的err是*NumErr型別的,如果語法有誤,err.Error = ErrSyntax;如果結果超出類型範圍err.Error = ErrRange。
func main() {
a := "123789"
i, _ := strconv.ParseInt(a, 10, 0)
fmt.Printf("%v:%T\n", i, i) // 123789:int64
}
16進位制字串轉10進位制int
func main() {
a := 0x20
i, _ := strconv.ParseInt(strconv.Itoa(a), 0, 0)
fmt.Println(i) // 32
}
8進位制字串轉10進位制int
func main() {
a := 015
i, _ := strconv.ParseInt(strconv.Itoa(a), 0, 0)
fmt.Println(i) // 13
}
ParseUint()
func ParseUint(s string, base int, bitSize int) (n uint64, err error)
ParseUint類似ParseInt但不接受正負號,用於無符號整型。
func main() {
a := 015
i, _ := strconv.ParseUint(strconv.Itoa(a), 0, 8)
fmt.Println(i) // 13
}
ParseFloat()
func ParseFloat(s string, bitSize int) (f float64, err error)
解析一個表示浮點數的字串並返回其值。
如果s合乎語法規則,函式會返回最為接近s表示值的一個浮點數(使用IEEE754規範舍入)。
bitSize指定了期望的接收型別,32是float32(返回值可以不改變精確值的賦值給float32),64是float64;
返回值err是*NumErr型別的,語法有誤的,err.Error=ErrSyntax;結果超出表示範圍的,返回值f為±Inf,err.Error= ErrRange。
func main() {
a := "15.13"
i, _ := strconv.ParseFloat(a, 64)
fmt.Printf("%v:%T", i, i) // 15.13:float64
}
Format系列函式
Format系列函式實現了將給定型別資料格式化為string型別資料的功能。
FormatBool()
func FormatBool(b bool) string
根據b的值返回”true”或”false”。
func main() {
ret := strconv.FormatBool(true)
fmt.Printf("%v:%T", ret, ret) // true:string
}
FormatInt()
func FormatInt(i int64, base int) string
十進位制轉二進位制
func main() {
ret := strconv.FormatInt(2, 2)
fmt.Printf("%v:%T", ret, ret) // 10:string
}
十進位制轉16進位制
func main() {
ret := strconv.FormatInt(10, 16)
fmt.Printf("%v:%T", ret, ret) // a:string
}
FormatUint()
func FormatUint(i uint64, base int) string
是FormatInt的無符號整數版本。
1.1.15. FormatFloat()
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
函式將浮點數表示為字串並返回。
bitSize表示f的來源型別(32:float32、64:float64),會據此進行舍入。
fmt表示格式:’f’(-ddd.dddd)、’b’(-ddddp±ddd,指數為二進位制)、’e’(-d.dddde±dd,十進位制指數)、’E’(-d.ddddE±dd,十進位制指數)、’g’(指數很大時用’e’格式,否則’f’格式)、’G’(指數很大時用’E’格式,否則’f’格式)。
prec控制精度(排除指數部分):對’f’、’e’、’E’,它表示小數點後的數字個數;對’g’、’G’,它控制總的數字個數。如果prec 為-1,則代表使用最少數量的、但又必需的數字來表示f。
1.1.16. 程式碼示例
s1 := strconv.FormatBool(true)
s2 := strconv.FormatFloat(3.1415, 'E', -1, 64)
s3 := strconv.FormatInt(-2, 16)
s4 := strconv.FormatUint(2, 16)
1.1.17. 其他
1.1.18. isPrint()
func IsPrint(r rune) bool
返回一個字元是否是可列印的,和unicode.IsPrint一樣,r必須是:字母(廣義)、數字、標點、符號、ASCII空格。
1.1.19. CanBackquote()
func CanBackquote(s string) bool
返回字串s是否可以不被修改的表示為一個單行的、沒有空格和tab之外控制字元的反引號字串。
1.1.20. 其他
除上文列出的函式外,strconv包中還有Append系列、Quote系列等函式。具體用法可檢視官方文件。
參考連結:連結