golang 中strconv包用法
本文转自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包用法相关推荐
- golang 中regexp包用法
本文转自Golove博客:http://www.cnblogs.com/golove/p/3270918.html regexp 包中的函数和方法 目录 1.判断在 []byte 中能否找到正则表达式 ...
- php_os用法,golang中os包用法
os包中实现了平台无关的接口,设计向Unix风格,但是错误处理是go风格,当os包使用时,如果失败之后返回错误类型而不是错误数量. os包中函数设计方式和Unix类似,下面来看一下. func Chd ...
- golang 中io包用法(一)
本文转自Golove博客:http://www.cnblogs.com/golove/p/3276678.html ,并在此基础上进行修改. io 包为I/O原语提供了基础的接口.它主要包装了这些 ...
- golang中time包用法
time包中包括两类时间:时间点(某一时刻)和时常(某一段时间) 1时间常量(时间格式化) const (ANSIC = "Mon Jan _2 15:04:05 2006"Uni ...
- golang中的包管理工具——govendor和godep简单学习
为什么用vendor目录 依赖问题 我们知道,一个工程稍大一点,通常会依赖各种各样的包.而Go使用统一的GOPATH管理依赖包,且每个包仅保留一个版本.而不同的依赖包由各自的版本工具独立管理,所以当所 ...
- golang中builtin包说明
builtin包是go的预声明定义,包括go语言中常用的各种类型和方法声明,包括变量和常量两部分.其详细声明在builtin.go文件中,链接:http://golang.org/src/builti ...
- go中 -strconv包的使用
strconv 包中的函数和方法 // atob.go ------------------------------------------------------------ // ParseBoo ...
- golang中 type func() 用法分析
在看golang 的http服务部分代码时,被golang 中的 type func()写法难住了,一时没看懂代码.后来查资料后,有了一点理解. 在golang中可以通过这样简单实现一个http服务 ...
- golang 中 signal 包的 Notify 函数用法介绍
函数声明为: func Notify(c chan<- os.Signal, sig ...os.Signal) 官方描述: Notify函数让signal包将输入信号转发到c.如果没有列出要传 ...
- golang 中 strings 包的 Replace 用法介绍
函数声明为: func Replace(s, old, new string, n int) string 官方描述为: 返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替 ...
最新文章
- python npz文件_numpy的文件存储 .npy .npz 文件
- 实现Date函数属性中的format方法
- linux挂载分区失败,Ubuntu分区挂载错误与Grub引导错误的修复
- decorator java_装饰器模式-Decorator(Java实现)
- 编译Linux内核的详细过程
- MFC六大核心机制之五、六:消息映射和命令传递
- SpringCloud Eureka参数配置项详解
- 作者:陈维政,男,北京大学博士生。
- 一发就会被秒赞的句子
- cnblogs上的mysql学习心得
- mysql dbutil_DBUtil连接数据库
- 人人都是产品经理总结 第一章
- 使命召唤4:现代战争
- [转载] 支持支付宝付款的四大国外主机
- 名词、指示代词和不定代词、形容词、副词
- 牛散村:国内低代码平台有哪些?low code平台整理分享!
- 6阶群的非平凡子群_简明算术教程——第二章 群——第9节 可解群
- MPV播放器 快捷键
- “缓冲区溢出攻击”原理分析及实例演示
- 新版飞信取消手机号捆绑 分析称移动意在圈地