日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

go中 -strconv包的使用

發布時間:2025/7/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go中 -strconv包的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

strconv 包中的函數和方法



// atob.go

------------------------------------------------------------

// ParseBool 將字符串轉換為布爾值
// 它接受真值:1, t, T, TRUE, true, True
// 它接受假值:0, f, F, FALSE, false, False.
// 其它任何值都返回一個錯誤
func ParseBool(str string) (value bool, err error)

package mainimport ("fmt""strconv" )func main() {fmt.Println(strconv.ParseBool("1")) // truefmt.Println(strconv.ParseBool("t")) // truefmt.Println(strconv.ParseBool("T")) // truefmt.Println(strconv.ParseBool("true")) // truefmt.Println(strconv.ParseBool("True")) // truefmt.Println(strconv.ParseBool("TRUE")) // truefmt.Println(strconv.ParseBool("TRue"))// false strconv.ParseBool: parsing "TRue": invalid syntaxfmt.Println(strconv.ParseBool("0")) // falsefmt.Println(strconv.ParseBool("f")) // falsefmt.Println(strconv.ParseBool("F")) // falsefmt.Println(strconv.ParseBool("false")) // falsefmt.Println(strconv.ParseBool("False")) // falsefmt.Println(strconv.ParseBool("FALSE")) // falsefmt.Println(strconv.ParseBool("FALse"))// false strconv.ParseBool: parsing "FAlse": invalid syntax }



------------------------------------------------------------

// FormatBool 將布爾值轉換為字符串 "true" 或 "false"
func FormatBool(b bool) string

func main() {fmt.Println(strconv.FormatBool(0 < 1)) // truefmt.Println(strconv.FormatBool(0 > 1)) // false }


------------------------------------------------------------

// AppendBool 將布爾值 b 轉換為字符串 "true" 或 "false"
// 然后將結果追加到 dst 的尾部,返回追加后的 []byte
func AppendBool(dst []byte, b bool) []byte

func main() {rst := make([]byte, 0)rst = strconv.AppendBool(rst, 0 < 1)fmt.Printf("%s\n", rst) // truerst = strconv.AppendBool(rst, 0 > 1)fmt.Printf("%s\n", rst) // truefalse }


============================================================



// atof.go

------------------------------------------------------------

// ParseFloat 將字符串轉換為浮點數
// s:要轉換的字符串
// bitSize:指定浮點類型(32:float32、64:float64)
// 如果 s 是合法的格式,而且接近一個浮點值,
// 則返回浮點數的四舍五入值(依據 IEEE754 的四舍五入標準)
// 如果 s 不是合法的格式,則返回“語法錯誤”
// 如果轉換結果超出 bitSize 范圍,則返回“超出范圍”
func ParseFloat(s string, bitSize int) (f float64, err error)

func main() {s := "0.12345678901234567890"f, err := strconv.ParseFloat(s, 32)fmt.Println(f, err) // 0.12345679104328156fmt.Println(float32(f), err) // 0.12345679f, err = strconv.ParseFloat(s, 64)fmt.Println(f, err) // 0.12345678901234568 }


============================================================



// atoi.go

------------------------------------------------------------

// ErrRange 表示值超出范圍
var ErrRange = errors.New("value out of range")

// ErrSyntax 表示語法不正確
var ErrSyntax = errors.New("invalid syntax")

// NumError 記錄轉換失敗
type NumError struct {
Func string // 失敗的函數名(ParseBool, ParseInt, ParseUint, ParseFloat)
Num string // 輸入的值
Err error // 失敗的原因(ErrRange, ErrSyntax)
}

// int 或 uint 類型的長度(32 或 64)
const IntSize = intSize?
const intSize = 32 << uint(^uint(0)>>63)

// 實現 Error 接口,輸出錯誤信息
func (e *NumError) Error() string

------------------------------------------------------------

// ParseInt 將字符串轉換為 int 類型
// s:要轉換的字符串
// base:進位制(2 進制到 36 進制)
// bitSize:指定整數類型(0:int、8:int8、16:int16、32:int32、64:int64)
// 返回轉換后的結果和轉換時遇到的錯誤
// 如果 base 為 0,則根據字符串的前綴判斷進位制(0x:16,0:8,其它:10)
func ParseInt(s string, base int, bitSize int) (i int64, err error)

func main() {fmt.Println(strconv.ParseInt("123", 10, 8))// 123fmt.Println(strconv.ParseInt("12345", 10, 8))// 127 strconv.ParseInt: parsing "12345": value out of rangefmt.Println(strconv.ParseInt("2147483647", 10, 0))// 2147483647fmt.Println(strconv.ParseInt("0xFF", 16, 0))// 0 strconv.ParseInt: parsing "0xFF": invalid syntaxfmt.Println(strconv.ParseInt("FF", 16, 0))// 255fmt.Println(strconv.ParseInt("0xFF", 0, 0))// 255 }


------------------------------------------------------------

// ParseUint 功能同 ParseInt 一樣,只不過返回 uint 類型整數
func ParseUint(s string, base int, bitSize int) (n uint64, err error)

func main() {fmt.Println(strconv.ParseUint("FF", 16, 8))// 255 }


------------------------------------------------------------

// Atoi 相當于 ParseInt(s, 10, 0)
// 通常使用這個函數,而不使用 ParseInt
func Atoi(s string) (i int, err error)

func main() {fmt.Println(strconv.Atoi("2147483647"))// 2147483647fmt.Println(strconv.Atoi("2147483648"))// 2147483647 strconv.ParseInt: parsing "2147483648": value out of range }


============================================================



// ftoa.go

------------------------------------------------------------

// FormatFloat 將浮點數 f 轉換為字符串值
// f:要轉換的浮點數
// fmt:格式標記(b、e、E、f、g、G)
// prec:精度(數字部分的長度,不包括指數部分)
// bitSize:指定浮點類型(32:float32、64:float64)
//
// 格式標記:
// 'b' (-ddddp±ddd,二進制指數)
// 'e' (-d.dddde±dd,十進制指數)
// 'E' (-d.ddddE±dd,十進制指數)
// 'f' (-ddd.dddd,沒有指數)
// 'g' ('e':大指數,'f':其它情況)
// 'G' ('E':大指數,'f':其它情況)
//
// 如果格式標記為 'e','E'和'f',則 prec 表示小數點后的數字位數
// 如果格式標記為 'g','G',則 prec 表示總的數字位數(整數部分+小數部分)
func FormatFloat(f float64, fmt byte, prec, bitSize int) string

package mainimport ("fmt""strconv" )func main() {f := 100.12345678901234567890123456789fmt.Println(strconv.FormatFloat(f, 'b', 5, 32))// 13123382p-17fmt.Println(strconv.FormatFloat(f, 'e', 5, 32))// 1.00123e+02fmt.Println(strconv.FormatFloat(f, 'E', 5, 32))// 1.00123E+02fmt.Println(strconv.FormatFloat(f, 'f', 5, 32))// 100.12346fmt.Println(strconv.FormatFloat(f, 'g', 5, 32))// 100.12fmt.Println(strconv.FormatFloat(f, 'G', 5, 32))// 100.12fmt.Println(strconv.FormatFloat(f, 'b', 30, 32))// 13123382p-17fmt.Println(strconv.FormatFloat(f, 'e', 30, 32))// 1.001234588623046875000000000000e+02fmt.Println(strconv.FormatFloat(f, 'E', 30, 32))// 1.001234588623046875000000000000E+02fmt.Println(strconv.FormatFloat(f, 'f', 30, 32))// 100.123458862304687500000000000000fmt.Println(strconv.FormatFloat(f, 'g', 30, 32))// 100.1234588623046875fmt.Println(strconv.FormatFloat(f, 'G', 30, 32))// 100.1234588623046875 }


------------------------------------------------------------

// AppendFloat 將浮點數 f 轉換為字符串值,并將轉換結果追加到 dst 的尾部
// 返回追加后的 []byte
func AppendFloat(dst []byte, f float64, fmt byte, prec int, bitSize int) []byte


func main() {f := 100.12345678901234567890123456789b := make([]byte, 0)b = strconv.AppendFloat(b, f, 'f', 5, 32)b = append(b, " "...)b = strconv.AppendFloat(b, f, 'e', 5, 32)fmt.Printf("%s", b) // 100.12346 1.00123e+0 }


============================================================



// itoa.go

------------------------------------------------------------

// FormatUint 將 int 型整數 i 轉換為字符串形式
// base:進位制(2 進制到 36 進制)
// 大于 10 進制的數,返回值使用小寫字母 'a' 到 'z'
func FormatInt(i int64, base int) string

func main() {i := int64(-2048)fmt.Println(strconv.FormatInt(i, 2)) // -100000000000fmt.Println(strconv.FormatInt(i, 8)) // -4000fmt.Println(strconv.FormatInt(i, 10)) // -2048fmt.Println(strconv.FormatInt(i, 16)) // -800fmt.Println(strconv.FormatInt(i, 36)) // -1kw }


------------------------------------------------------------

// FormatUint 將 uint 型整數 i 轉換為字符串形式
// base:進位制(2 進制到 36 進制)
// 大于 10 進制的數,返回值使用小寫字母 'a' 到 'z'
func FormatUint(i uint64, base int) string

func main() {i := uint64(2048)fmt.Println(strconv.FormatUint(i, 2)) // 100000000000fmt.Println(strconv.FormatUint(i, 8)) // 4000fmt.Println(strconv.FormatUint(i, 10)) // 2048fmt.Println(strconv.FormatUint(i, 16)) // 800fmt.Println(strconv.FormatUint(i, 36)) // 1kw }


------------------------------------------------------------

// Itoa 相當于 FormatInt(i, 10)
func Itoa(i int) string

func main() {fmt.Println(strconv.Itoa(-2048)) // -2048fmt.Println(strconv.Itoa(2048)) // 2048 }


------------------------------------------------------------

// AppendInt 將 int 型整數 i 轉換為字符串形式,并追加到 dst 的尾部
// i:要轉換的字符串
// base:進位制
// 返回追加后的 []byte
func AppendInt(dst []byte, i int64, base int) []byte

func main() {b := make([]byte, 0)b = strconv.AppendInt(b, -2048, 16)fmt.Printf("%s", b) // -800 }


------------------------------------------------------------

// AppendUint 將 uint 型整數 i 轉換為字符串形式,并追加到 dst 的尾部
// i:要轉換的字符串
// base:進位制
// 返回追加后的 []byte
func AppendUint(dst []byte, i uint64, base int) []byte

func main() {
?? ?b := make([]byte, 0)
?? ?b = strconv.AppendUint(b, 2048, 16)
?? ?fmt.Printf("%s", b) // 800
}

============================================================



// quote.go

------------------------------------------------------------

// Quote 將字符串 s 轉換為“雙引號”引起來的字符串
// 其中的特殊字符將被轉換為“轉義字符”
// “不可顯示的字符”將被轉換為“轉義字符”
func Quote(s string) string

func main() {fmt.Println(strconv.Quote(`C:\Windows`))// "C:\\Windows" }


注:此處是反引號(鍵盤上1左側那個按鍵),而不是單引號

------------------------------------------------------------

// AppendQuote 將字符串 s 轉換為“雙引號”引起來的字符串,
// 并將結果追加到 dst 的尾部,返回追加后的 []byte
// 其中的特殊字符將被轉換為“轉義字符”
func AppendQuote(dst []byte, s string) []byte

func main() {s := `C:\Windows`b := make([]byte, 0)b = strconv.AppendQuote(b, s)fmt.Printf("%s", b) // "C:\\Windows" }


------------------------------------------------------------

// QuoteToASCII 將字符串 s 轉換為“雙引號”引起來的 ASCII 字符串
// “非 ASCII 字符”和“特殊字符”將被轉換為“轉義字符”
func QuoteToASCII(s string) string

func main() {fmt.Println(strconv.QuoteToASCII("Hello 世界!"))// "Hello \u4e16\u754c\uff01" }


------------------------------------------------------------

// AppendQuoteToASCII 將字符串 s 轉換為“雙引號”引起來的 ASCII 字符串,
// 并將結果追加到 dst 的尾部,返回追加后的 []byte
// “非 ASCII 字符”和“特殊字符”將被轉換為“轉義字符”
func AppendQuoteToASCII(dst []byte, s string) []byte

func main() {s := "Hello 世界!"b := make([]byte, 0)b = strconv.AppendQuoteToASCII(b, s)fmt.Printf("%s", b) // "Hello \u4e16\u754c\uff01" }


------------------------------------------------------------

// QuoteRune 將 Unicode 字符轉換為“單引號”引起來的字符串
// “特殊字符”將被轉換為“轉義字符”
func QuoteRune(r rune) string
func main() {
?? ?fmt.Println(strconv.QuoteRune('好'))
?? ?// '好'
}

注:此處為單引號,而不是反引號,這點要與Quote()使用去分開

------------------------------------------------------------

// AppendQuoteRune 將 Unicode 字符轉換為“單引號”引起來的字符串,
// 并將結果追加到 dst 的尾部,返回追加后的 []byte
// “特殊字符”將被轉換為“轉義字符”
func AppendQuoteRune(dst []byte, r rune) []byte

func main() {b := make([]byte, 0)b = strconv.AppendQuoteRune(b, '好')fmt.Printf("%s", b) // '好' }


------------------------------------------------------------

// QuoteRuneToASCII 將 Unicode 字符轉換為“單引號”引起來的 ASCII 字符串
// “非 ASCII 字符”和“特殊字符”將被轉換為“轉義字符”
func QuoteRuneToASCII(r rune) string

func main() {fmt.Println(strconv.QuoteRuneToASCII('好'))// '\u597d' }


------------------------------------------------------------

// AppendQuoteRune 將 Unicode 字符轉換為“單引號”引起來的 ASCII 字符串,
// 并將結果追加到 dst 的尾部,返回追加后的 []byte
// “非 ASCII 字符”和“特殊字符”將被轉換為“轉義字符”
func AppendQuoteRuneToASCII(dst []byte, r rune) []byte

func main() {b := make([]byte, 0)b = strconv.AppendQuoteRuneToASCII(b, '好')fmt.Printf("%s", b) // '\u597d' }


------------------------------------------------------------

// CanBackquote 判斷字符串 s 是否可以表示為一個單行的“反引號”字符串
// 字符串中不能含有控制字符(除了 \t)和“反引號”字符,否則返回 false
func CanBackquote(s string) bool

func main() {b := strconv.CanBackquote("C:\\Windows\n")fmt.Println(b) // falseb = strconv.CanBackquote("C:\\Windows\r")fmt.Println(b) // falseb = strconv.CanBackquote("C:\\Windows\f")fmt.Println(b) // falseb = strconv.CanBackquote("C:\\Windows\t")fmt.Println(b) // trueb = strconv.CanBackquote("C:\\`Windows`")fmt.Println(b) // false }


------------------------------------------------------------

// UnquoteChar 將 s 中的第一個字符“取消轉義”并解碼
//
// s:轉義后的字符串
// quote:字符串使用的“引號符”(用于對引號符“取消轉義”)
//
// value: 解碼后的字符
// multibyte:value 是否為多字節字符
// tail: 字符串 s 除去 value 后的剩余部分
// error: 返回 s 中是否存在語法錯誤
//
// 參數 quote 為“引號符”
// 如果設置為單引號,則 s 中允許出現 \' 字符,不允許出現單獨的 ' 字符
// 如果設置為雙引號,則 s 中允許出現 \" 字符,不允許出現單獨的 " 字符
// 如果設置為 0,則不允許出現 \' 或 \" 字符,可以出現單獨的 ' 或 " 字符
func UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error)

func main() {s := `\"大\\家\\好!\"`c, mb, sr, _ := strconv.UnquoteChar(s, '"')fmt.Printf("%-3c %v\n", c, mb)for ; len(sr) > 0; c, mb, sr, _ = strconv.UnquoteChar(sr, '"') {fmt.Printf("%-3c %v\n", c, mb)}// " false// 大 true// \ false// 家 true// \ false// 好 true// ! true }


------------------------------------------------------------

// Unquote 將“帶引號的字符串” s 轉換為常規的字符串(不帶引號和轉義字符)
// s 可以是“單引號”、“雙引號”或“反引號”引起來的字符串(包括引號本身)
// 如果 s 是單引號引起來的字符串,則返回該該字符串代表的字符
func Unquote(s string) (t string, err error)

func main() {sr, err := strconv.Unquote(`"\"大\t家\t好!\""`)fmt.Println(sr, err)sr, err = strconv.Unquote(`'大家好!'`)fmt.Println(sr, err)sr, err = strconv.Unquote(`'好'`)fmt.Println(sr, err)sr, err = strconv.Unquote("`大\\t家\\t好!`")fmt.Println(sr, err) }


------------------------------------------------------------

// IsPrint 判斷 Unicode 字符 r 是否是一個可顯示的字符
// 可否顯示并不是你想象的那樣,比如空格可以顯示,而\t則不能顯示
// 具體可以參考 Go 語言的源碼
func IsPrint(r rune) bool

func main() {fmt.Println(strconv.IsPrint('a')) // truefmt.Println(strconv.IsPrint('好')) // truefmt.Println(strconv.IsPrint(' ')) // truefmt.Println(strconv.IsPrint('\t')) // falsefmt.Println(strconv.IsPrint('\n')) // falsefmt.Println(strconv.IsPrint(0)) // false }

?

strconv
strconv.Quote(s string)string -> 返回字符串在go語法下的雙引號字面值表示,控制字符和不可打印字符會進行轉義(\t,\n等)
strconv.QuoteToASCII(s string)string -> 返回字符串在go語法下的雙引號字面值表示,除了上面的和非ASCII字符會進行轉義
strconv.QuoteRune(r rune)string -> 返回字符r在go語法下的單引號字面值表示,控制字符,不可打印字符會進行轉義(\n,\t,\xFF等)
strconv.QuoteRuneToASCII(r rune)string -> 返回字符r在go語法下的單引號字面值表示,除了上面的,非ASCII字符 也會進行轉義
strconv.Unquote(s string)(t string,err error) -> 函數假設s是一個半引號、雙引號、反引號包圍的go語法字符串,解析它并返回它表示的值。(如果是單引號括起來的,函數會認為s是go字符字面值,返回一個單字符的字符串)
strconv.ParseBool(str string)(value bool,err error),返回字符串表示的bool值。它接受1、0、t,f、T、F、true、false、True、False、TRUE、FALSE;否則返回錯誤
strconv.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=ErrorRange
strconv.ParseUint(s string,base int,bitSize)(n uint64, err error) -> 類似ParseInt但不接受正負號,用于無符號整型
strconv.Float(a string,bitSize int)(f float64,err error) -> 解析一個表示浮點數的字符串并返回其值。如果s合乎語法規則,函數會返回最為接近s表示值的一個浮點數(使用IEEE754規范舍入)。bitSize指定了期望的接收類型,32是float32,64是float64,返回值是NumErr
strconv.FormatBool(b bool)string -> 根據b的值返回”true”或”false”
strconv.FormatInt(i int64,base int)string -> 返回的i的base進制的字符串表示,base必須在2-36之間,結果中會使用小寫字母a到z表示大于10的數字
strconv.FormatUint(i uint64, base int)string -> 是FormatInt的無符號整數版本
strconv.FormFloat(f float64,fmt byte,prec,bitSize int)string -> 函數將浮點數表示為字符串并返回。bitSize表示的來源類型(32:float32,64:float64),會據此進行舍入。
strconv.Atoa(s string)(i int,err error) -> Atoi是ParseInt(s,10,0)的簡寫
strconv.Itoa(i int)string -> Format(i,10)的簡寫
---------------------
eg:

package main

import "fmt"
import "strconv"

func main() {
/*
由于將字符串轉為其他數據類型可能會出錯,strconv 包定義了兩個 error 類型的變量:ErrRange 和 ErrSyntax。
其中,ErrRange 表示值超過了類型能表示的最大范圍,比如將 "128" 轉為 int8 就會返回這個錯誤;ErrSyntax 表示語法錯誤,比如將 "" 轉為 int 類型會返回這個錯誤。
func syntaxError(fn, str string) *NumError {
return &NumError{fn, str, ErrSyntax}
}

func rangeError(fn, str string) *NumError {
return &NumError{fn, str, ErrRange}
}
*/
/* 字符串轉為整數
func ParseInt(s string, base int, bitSize int) (i int64, err error)
func ParseUint(s string, base int, bitSize int) (n uint64, err error)
func Atoi(s string) (i int, err error)
*/
n, err := strconv.ParseInt("128", 10, 8)
if err != nil {
fmt.Println(err)
}
fmt.Println(strconv.ParseInt("134", 10, 64))

/*
func FormatUint(i uint64, base int) string // 無符號整型轉字符串
func FormatInt(i int64, base int) string // 有符號整型轉字符串
func Itoa(i int) string
*/

//還可以用 fmt.Sprintf("%d",i) 來轉化 ,但是我們分別循環轉換了10000次。Sprintf 的時間是 3.549761ms,而 Itoa 的時間是 848.208us,相差 4 倍多。

/* 字符串和布爾值之間的轉換
// 接受 1, t, T, TRUE, true, True, 0, f, F, FALSE, false, False 等字符串;
// 其他形式的字符串會返回錯誤\
func ParseBool(str string) (value bool, err error)
// 直接返回 "true" 或 "false"
func FormatBool(b bool) string
// 將 "true" 或 "false" append 到 dst 中
// 這里用了一個 append 函數對于字符串的特殊形式:append(dst, "true"...)
func AppendBool(dst []byte, b bool)
*/

/* 字符串和浮點數之間的轉換
func ParseFloat(s string, bitSize int) (f float64, err error)
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
func AppendFloat(dst []byte, f float64, fmt byte, prec int, bitSize int)
*/
strconv.FormatFloat(1223.13252, 'e', 3, 32) // 結果:1.223e+03
strconv.FormatFloat(1223.13252, 'g', 3, 32) // 結果:1.22e+03
//由于浮點數有精度的問題,精度不一樣,ParseFloat 和 FormatFloat 可能達不到互逆的效果。如:
s := strconv.FormatFloat(1234.5678, 'g', 6, 64)
strconv.ParseFloat(s, 64)

//如果要輸出這樣一句話:This is "studygolang.com" website. 該如何做?
fmt.Println(`This is "studygolang.com" website`)
fmt.Println("This is", strconv.Quote("studygolang.com"), "website")

}

轉載于:https://www.cnblogs.com/klb561/p/10740969.html

總結

以上是生活随笔為你收集整理的go中 -strconv包的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。