1. 程式人生 > 其它 >golang中的標準庫strconv

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系列等函式。具體用法可檢視官方文件。

參考連結:連結