本文转自Golove博客:http://www.cnblogs.com/golove/p/3262925.html

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
}

转载于:https://www.cnblogs.com/msnsj/p/4242596.html

golang 中strconv包用法相关推荐

  1. golang 中regexp包用法

    本文转自Golove博客:http://www.cnblogs.com/golove/p/3270918.html regexp 包中的函数和方法 目录 1.判断在 []byte 中能否找到正则表达式 ...

  2. php_os用法,golang中os包用法

    os包中实现了平台无关的接口,设计向Unix风格,但是错误处理是go风格,当os包使用时,如果失败之后返回错误类型而不是错误数量. os包中函数设计方式和Unix类似,下面来看一下. func Chd ...

  3. golang 中io包用法(一)

    本文转自Golove博客:http://www.cnblogs.com/golove/p/3276678.html   ,并在此基础上进行修改. io 包为I/O原语提供了基础的接口.它主要包装了这些 ...

  4. golang中time包用法

    time包中包括两类时间:时间点(某一时刻)和时常(某一段时间) 1时间常量(时间格式化) const (ANSIC = "Mon Jan _2 15:04:05 2006"Uni ...

  5. golang中的包管理工具——govendor和godep简单学习

    为什么用vendor目录 依赖问题 我们知道,一个工程稍大一点,通常会依赖各种各样的包.而Go使用统一的GOPATH管理依赖包,且每个包仅保留一个版本.而不同的依赖包由各自的版本工具独立管理,所以当所 ...

  6. golang中builtin包说明

    builtin包是go的预声明定义,包括go语言中常用的各种类型和方法声明,包括变量和常量两部分.其详细声明在builtin.go文件中,链接:http://golang.org/src/builti ...

  7. go中 -strconv包的使用

    strconv 包中的函数和方法 // atob.go ------------------------------------------------------------ // ParseBoo ...

  8. golang中 type func() 用法分析

    在看golang 的http服务部分代码时,被golang 中的 type func()写法难住了,一时没看懂代码.后来查资料后,有了一点理解. 在golang中可以通过这样简单实现一个http服务 ...

  9. golang 中 signal 包的 Notify 函数用法介绍

    函数声明为: func Notify(c chan<- os.Signal, sig ...os.Signal) 官方描述: Notify函数让signal包将输入信号转发到c.如果没有列出要传 ...

  10. golang 中 strings 包的 Replace 用法介绍

    函数声明为: func Replace(s, old, new string, n int) string 官方描述为: 返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替 ...

最新文章

  1. python npz文件_numpy的文件存储 .npy .npz 文件
  2. 实现Date函数属性中的format方法
  3. linux挂载分区失败,Ubuntu分区挂载错误与Grub引导错误的修复
  4. decorator java_装饰器模式-Decorator(Java实现)
  5. 编译Linux内核的详细过程
  6. MFC六大核心机制之五、六:消息映射和命令传递
  7. SpringCloud Eureka参数配置项详解
  8. 作者:陈维政,男,北京大学博士生。
  9. 一发就会被秒赞的句子
  10. cnblogs上的mysql学习心得
  11. mysql dbutil_DBUtil连接数据库
  12. 人人都是产品经理总结 第一章
  13. 使命召唤4:现代战争
  14. [转载] 支持支付宝付款的四大国外主机
  15. 名词、指示代词和不定代词、形容词、副词
  16. 牛散村:国内低代码平台有哪些?low code平台整理分享!
  17. 6阶群的非平凡子群_简明算术教程——第二章 群——第9节 可解群
  18. MPV播放器 快捷键
  19. “缓冲区溢出攻击”原理分析及实例演示
  20. 新版飞信取消手机号捆绑 分析称移动意在圈地

热门文章

  1. MyEclipse内存不足配置
  2. 使用ODBC API读取Decimal或者Numeric
  3. 培训师之绕口令与气息练习
  4. UJAM Beatmaker VICE for Mac(80年代风格鼓机插件)
  5. macbook 系统 php 版本和 web 的 php 版本不一样,brew link php 失败
  6. 用vue-cli+iview做项目不兼容ie问题
  7. linux下led灯驱动程序
  8. 亿阳防火墙-命令行指令参考手册
  9. 「leetcode」216.组合总和【回溯算法】详解!
  10. 苹果mac幻灯片演示文稿制作软件:PowerPoint 2019