Golang学习(5)——strconv包

1160636144 · · 1415 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Golang学习聽-聽strconv聽包

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

// 将布尔值转换为字符串 true 或 false

func聽FormatBool(b bool) string

// 将字符串转换为布尔值

// 它接受真值:1, t, T, TRUE, true, True

// 它接受假值:0, f, F, FALSE, false, False

// 其它任何值都返回一个错误。

func聽ParseBool(str string) (bool, error)

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

// ErrRange 表示值超出范围

var ErrRange = errors.New("value out of range")

// ErrSyntax 表示语法不正确

var ErrSyntax = errors.New("invalid syntax")

// 将整数转换为字符串形式。base 表示转换进制,取值在 2 到 36 之间。

// 结果中大于 10 的数字用小写字母 a - z 表示。

func聽FormatInt(i int64, base int) string

func聽FormatUint(i uint64, base int) string

// 将字符串解析为整数,ParseInt 支持正负号,ParseUint 不支持正负号。

// base 表示进位制(2 到 36),如果 base 为 0,则根据字符串前缀判断,

// 前缀 0x 表示 16 进制,前缀 0 表示 8 进制,否则是 10 进制。

// bitSize 表示结果的位宽(包括符号位),0 表示最大位宽。

func聽ParseInt(s string, base int, bitSize int) (i int64, err error)

func聽ParseUint(s string, base int, bitSize int) (uint64, error)

// 将整数转换为十进制字符串形式(即:FormatInt(i, 10) 的简写)

func聽Itoa(i int) string

// 将字符串转换为十进制整数,即:ParseInt(s, 10, 0) 的简写)

func聽Atoi(s string) (int, error)聽

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

// 示例

func聽main() {

聽聽聽聽fmt.Println(strconv.ParseInt("FF", 16, 0)) 聽聽// 255

聽 聽fmt.Println(strconv.ParseInt("0xFF", 16, 0)) // 0聽strconv.ParseInt: parsing "0xFF": invalid syntax

聽聽聽聽fmt.Println(strconv.ParseInt("0xFF", 0, 0)) 聽// 255

聽聽聽聽fmt.Println(strconv.ParseInt("9", 10, 4)) 聽 聽// 7 strconv.ParseInt: parsing "9": value out of range}

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

// 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

// 将字符串解析为浮点数,使用 IEEE754 规范进行舍入。

// bigSize 取值有 32 和 64 两种,表示转换结果的精度。聽

// 如果有语法错误,则 err.Error = ErrSyntax

// 如果结果超出范围,则返回 ±Inf,err.Error = ErrRange

func聽ParseFloat(s string, bitSize int) (float64, error)聽

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

// 示例

func聽main() {聽

聽聽聽聽s := "0.12345678901234567890"

聽聽聽聽f, err := strconv.ParseFloat(s, 32) fmt.Println(f, err)

聽聽 聽// 0.12345679104328156

聽聽聽聽fmt.Println(float32(f), err)聽 聽 聽 聽// 0.12345679

聽聽聽聽f, err = strconv.ParseFloat(s, 64)聽

聽聽聽聽fmt.Println(f, err)聽 聽 聽 聽 聽 聽 聽 聽 // 0.12345678901234568

}

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

// 判断字符串是否可以不被修改的表示为一个单行的反引号字符串。

// 字符串中不能含有控制字符(除了 \t)和“反引号”字符,否则返回 false

func聽CanBackquote(s string) bool

// 示例:找出所有 !CanBackquote 的字符

func聽main() {

聽聽聽聽for i := rune(0); i < utf8.MaxRune; i++ {

聽聽聽聽聽聽聽聽if !strconv.CanBackquote(string(i)) {聽

聽聽聽聽聽聽聽聽聽聽聽聽fmt.Printf("%q, ", i)聽

聽聽聽聽聽聽聽聽}

聽聽聽聽}

}

// 结果如下:

// '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\a', '\b', '\n', '\v', '\f', '\r', '\x0e', '\x0f', '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x1a', '\x1b', '\x1c', '\x1d', '\x1e', '\x1f', '`', '\u007f', '\ufeff'

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

// 判断 r 是否为可打印字符

// 可否打印并不是你想象的那样,比如空格可以打印,而\t则不能打印

func聽IsPrint(r rune) bool

// 判断 r 是否为 Unicode 定义的图形字符。

func聽IsGraphic(r rune) bool

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

// 示例:获取不可打印字符和非图形字符

func聽main() {

聽聽聽聽var rnp, rng, rpng, rgnp []rune

聽聽聽聽const maxLen = 32

聽聽聽聽for i := rune(0); i < utf8.MaxRune; i++ {

聽聽聽聽聽聽聽聽if !strconv.IsPrint(i) {聽

聽聽聽聽聽聽聽聽聽聽聽聽// 不可打印

聽聽聽聽聽聽聽聽聽聽聽聽if聽len(rnp) < maxLen {聽

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽rnp = append(rnp, i)

聽聽聽聽聽聽聽聽聽聽聽聽}

聽聽聽聽聽聽聽聽聽聽聽聽if strconv.IsGraphic(i) && len(rgnp) < maxLen {

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// 图形字符

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽rgnp = append(rgnp, i)

聽聽聽聽聽聽聽聽聽聽聽聽}

聽聽聽聽聽聽聽聽}

聽聽聽聽聽聽聽聽if !strconv.IsGraphic(i) {

聽聽聽聽聽聽聽聽聽聽聽聽// 非图形字符

聽聽聽聽聽聽聽聽聽聽聽聽if聽len(rng) < maxLen {

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽rng = append(rng, i)

聽聽聽聽聽聽聽聽聽聽聽聽}

聽聽聽聽聽聽聽聽聽聽聽聽if strconv.IsPrint(i) && len(rpng) < maxLen {

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// 可打印

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽rpng = append(rpng, i)

聽聽聽聽聽聽聽聽聽聽聽聽}

聽聽聽聽聽聽聽聽}

聽聽聽聽}

聽聽聽聽fmt.Printf("不可打印字符聽 聽 :%q\n", rnp)

聽聽聽聽fmt.Printf("非图形字符聽 聽 聽 :%q\n", rng)聽

聽聽聽聽fmt.Printf("不可打印图形字符:%q\n", rgnp)聽

聽聽聽聽fmt.Printf("可打印非图形字符:%q\n", rpng)聽

}

// 不可打印字符:

['\x00' '\x01' '\x02' '\x03' '\x04' '\x05' '\x06' '\a' '\b' '\t' '\n' '\v' '\f' '\r' '\x0e' '\x0f' '\x10' '\x11' '\x12' '\x13' '\x14' '\x15' '\x16' '\x17' '\x18' '\x19' '\x1a' '\x1b' '\x1c' '\x1d' '\x1e' '\x1f']

// 非图形字符:

['\x00' '\x01' '\x02' '\x03' '\x04' '\x05' '\x06' '\a' '\b' '\t' '\n' '\v' '\f' '\r' '\x0e' '\x0f' '\x10' '\x11' '\x12' '\x13' '\x14' '\x15' '\x16' '\x17' '\x18' '\x19' '\x1a' '\x1b' '\x1c' '\x1d' '\x1e' '\x1f']

// 不可打印图形字符:

['\u00a0' '\u1680' '\u2000' '\u2001' '\u2002' '\u2003' '\u2004' '\u2005' '\u2006' '\u2007' '\u2008' '\u2009' '\u200a' '\u202f' '\u205f' '\u3000']

// 可打印非图形字符:[]

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

// 将 s 转换为双引号字符串

func聽Quote(s string) string

// 功能同上,非 ASCII 字符和不可打印字符会被转义

func聽QuoteToASCII(s string) string

// 功能同上,非图形字符会被转义

func聽QuoteToGraphic(s string) string

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

// 示例

func聽main() {

聽聽聽聽s := "Hello\t世界!\n"

聽聽聽聽fmt.Println(s)聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽// Hello 世界!(换行)

聽聽聽聽fmt.Println(strconv.Quote(s))聽 聽 聽 聽 聽 // "Hello\t世界!\n"

聽聽聽聽fmt.Println(strconv.QuoteToASCII(s)) 聽 // "Hello\t\u4e16\u754c\uff01\n"

聽聽聽聽fmt.Println(strconv.QuoteToGraphic(s)) // "Hello\t世界!\n"

}聽

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

// 将 r 转换为单引号字符

func聽QuoteRune(r rune) string

// 功能同上,非 ASCII 字符和不可打印字符会被转义

func聽QuoteRuneToASCII(r rune) string

// 功能同上,非图形字符会被转义

func聽QuoteRuneToGraphic(r rune) string

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

// Unquote 将“带引号的字符串” s 转换为常规的字符串(不带引号和转义字符)

// s 可以是“单引号”、“双引号”或“反引号”引起来的字符串(包括引号本身)

// 如果 s 是单引号引起来的字符串,则返回该该字符串代表的字符

func聽Unquote(s string) (string, error)

// UnquoteChar 将带引号字符串(不包含首尾的引号)中的第一个字符“取消转义”并解码

//// s聽 聽 :带引号字符串(不包含首尾的引号)

// quote:字符串使用的“引号符”(用于对字符串中的引号符“取消转义”)

//// value聽 聽 :解码后的字符

// multibyte:value 是否为多字节字符

// tail聽 聽 聽:字符串 s 解码后的剩余部分

// error聽 聽 :返回 s 中是否存在语法错误

//// 参数 quote 为“引号符”

// 如果设置为单引号,则 s 中允许出现 \'、" 字符,不允许出现单独的 ' 字符

// 如果设置为双引号,则 s 中允许出现 \"、' 字符,不允许出现单独的 " 字符

// 如果设置为 0,则不允许出现 \' 或 \" 字符,但可以出现单独的 ' 或 " 字符

func聽UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error)聽

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

// 示例

func聽main() {

聽聽聽聽s1 := "`Hello 世界!`"聽 聽 聽 聽 聽 聽 聽 聽 聽// 解析反引号字符串

聽聽聽聽s2 := `"Hello\t\u4e16\u754c\uff01"`聽 聽// 解析双引号字符串聽聽聽聽

聽聽聽聽fmt.Println(strconv.Unquote(s1))聽 聽 // Hello 世界! <nil>

聽聽聽聽fmt.Println(strconv.Unquote(s2))聽 聽 // Hello 世界! <nil>

聽聽聽聽fmt.Println()聽

聽聽聽聽fmt.Println(strconv.UnquoteChar(`\u4e16\u754c\uff01`, 0))

聽聽聽聽// 19990 true \u754c\uff01 <nil>

聽聽聽聽fmt.Println(strconv.UnquoteChar(`\"abc\"`, '"'))

聽聽聽聽// 34 false abc\" <nil>

}

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

// 将各种类型转换为字符串后追加到 dst 尾部。

func聽AppendInt(dst []byte, i int64, base int) []byte

func聽AppendUint(dst []byte, i uint64, base int) []byte

func聽AppendFloat(dst []byte, f float64, fmt byte, prec, bitSize int) []byte

func聽AppendBool(dst []byte, b bool) []byte

// 将各种类型转换为带引号字符串后追加到 dst 尾部。

func聽AppendQuote(dst []byte, s string) []byte

func聽AppendQuoteToASCII(dst []byte, s string) []byte

func聽AppendQuoteToGraphic(dst []byte, s string) []byte

func聽AppendQuoteRune(dst []byte, r rune) []byte

func聽AppendQuoteRuneToASCII(dst []byte, r rune) []byte

func聽AppendQuoteRuneToGraphic(dst []byte, r rune) []byte



有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:1160636144

查看原文:Golang学习(5)——strconv包

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1415 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传