strconv:各种数据类型和字符串之间的相互转换
介绍
strconv包实现了基本数据类型和其对应字符串之间的相互转换。主要有一下常用函数:Atoi,Itoa,Parse系列,Formart系列,Append系列
string和int之间的转换
这一种是我们经常使用的,但是我知道包括我在内,尤其是搞python的,肯定都这么干过
package main
import "fmt"
func main() {
num := 97
fmt.Println(string(num)) // a
}
结果发现打印出来的是个a,因为golang的字符串底层实质上就是一个个字节组成的字节数组,如果使用string(num)这种方式,那么会将num这个数值对应字符转成字符串打印出来,而ASCII码中97和a是对应的的,所以打印了a
Itoa
如果想把int转成string应该是用Itoa, i就是integer,这个a是什么?其实这个a就是字符串,只不过这是从C语言中遗留下来的,因为C中没有字符串的概念,而是使用字符数组,所以这个a在C中是array。但是在go中就把a当中字符串即可
package main
import (
"fmt"
"strconv"
)
func main() {
num := 97
fmt.Println(strconv.Itoa(num)) // 97
fmt.Println(strconv.Itoa(num) == "97") // true
}
Atoi
既然能把整型转成字符串,那么能不能把字符串转换为整型呢?显然是可以的,反过来即可,也就是Atoi。
package main
import (
"fmt"
"strconv"
)
func main() {
//整型转字符串可以直接转,但是字符串转整型,则是有可能发生错误的,因为必须要求字符串的每一个字符必须是数字也可以转
//所以这里除了返回结果,还会返回一个error
str := "97"
if num , err := strconv.Atoi(str); err != nil {
fmt.Println(err)
} else {
fmt.Println(num) //97
}
str = "97xx"
if num , err := strconv.Atoi(str); err != nil {
fmt.Println(err) //strconv.Atoi: parsing "97xx": invalid syntax
} else {
fmt.Println(num)
}
}
Parse系列函数
Parse类函数用于转换字符串为给定类型的值:ParseBool、ParseFloat、ParseInt、ParseUint
ParseBool
将指定字符串转换为对应的bool类型,只接受1、0、t、f、T、F、true、false、True、False、TRUE、FALSE,否则返回错误
package main
import (
"fmt"
"strconv"
)
func main() {
//因为是字符串转回去,必然可能发生转化失败的情况,因此都会多返回一个error
//而这里解析成功了,所以error是nil
fmt.Println(strconv.ParseBool("1")) // true <nil>
fmt.Println(strconv.ParseBool("F")) // false <nil>
}
ParseInt
func ParseInt(s string, base int, bitSize int) (i int64, err error)
s:转成int的字符串base:指定进制(2到36),如果base为0,那么会从字符串的前置来判断,如0x表示16进制等等,如果前缀也没有那么默认是10进制bistSize:整数类型,0、8、16、32、64 分别代表 int、int8、int16、int32、int64
返回的err是*NumErr类型的,如果语法有误,err.Error = ErrSyntax;如果结果超出类型范围err.Error = ErrRange
package main
import (
"fmt"
"strconv"
)
func main() {
fmt.Println(strconv.ParseInt("0x16", 0, 0)) // 22 <nil>
fmt.Println(strconv.ParseInt("16", 16, 0)) // 22 <nil>
fmt.Println(strconv.ParseInt("16", 0, 0)) // 16 <nil>
//这里是八进制,在go 1.13中可以使用0o前缀,但我目前使用的1.12,所以直接使用0作为前缀表示八进制
fmt.Println(strconv.ParseInt("016", 0, 0)) // 14 <nil>
//进制为2,但是字符串出现了6,无法解析
fmt.Println(strconv.ParseInt("16", 2, 0)) // 0 strconv.ParseInt: parsing "16": invalid syntax
//只指定8位,显然存不下。最后给了一个能存储的最大的值
fmt.Println(strconv.ParseInt("257", 0, 8)) // 127 strconv.ParseInt: parsing "257": value out of range
//还可以指定正负号
fmt.Println(strconv.ParseInt("-0x16", 0, 0)) // -22 <nil>
fmt.Println(strconv.ParseInt("-016", 0, 0)) // -14 <nil>
}
ParseUnit
ParseUint类似ParseInt,但不接受正负号,用于无符号整型。
ParseFloat
func ParseFloat(s string, bitSize int) (f float64, err error)
bitSize:32、64,表示对应精度的float
package main
import (
"fmt"
"strconv"
)
func main() {
fmt.Println(strconv.ParseFloat("3.14", 64)) //3.14 <nil>
}
Format系列函数
Format系列函数就比较简单了,就是将指定数据类型格式化成字符串,Parse则是将字符串解析成指定数据类型,这两个是相反的。转成字符串的话,则不需要担心error了。
FormatBool
package main
import (
"fmt"
"strconv"
)
func main() {
fmt.Println(strconv.FormatBool(true)) //true
fmt.Println(strconv.FormatBool(false) == "false") //true
}
FormatInt
传入字符串和指定的进制
package main
import (
"fmt"
"strconv"
)
func main() {
//数值是22,但是它是16进制的,所以对应成10进制是16
fmt.Println(strconv.FormatInt(22, 16)) //16
}
FormatUint
是FormatInt的无符号版本
FormatFloat
函数将浮点数表示为字符串并返回。
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
f:float64fmt:fmt表示格式:’f’(-ddd.dddd)、’b’(-ddddp±ddd,指数为二进制)、’e’(-d.dddde±dd,十进制指数)、’E’(-d.ddddE±dd,十进制指数)、’g’(指数很大时用’e’格式,否则’f’格式)、’G’(指数很大时用’E’格式,否则’f’格式)。prec:prec控制精度(排除指数部分),对’f’、’e’、’E’,它表示小数点后的数字个数;对’g’、’G’,它控制总的数字个数。如果prec 为-1,则代表使用最少数量的、但又必需的数字来表示f。bitSize:f是哪一种float,32或者64
package main
import (
"fmt"
"strconv"
)
func main() {
fmt.Println(strconv.FormatFloat(3.1415, 'f', -1, 64)) //3.1415
fmt.Println(strconv.FormatFloat(3.1415, 'e', -1, 64)) //3.1415e+00
fmt.Println(strconv.FormatFloat(3.1415, 'E', -1, 64)) //3.1415E+00
fmt.Println(strconv.FormatFloat(3.1415, 'g', -1, 64)) //3.1415
}
strconv:各种数据类型和字符串之间的相互转换的更多相关文章
- JSON对象与字符串之间的相互转换
<html> <head> <meta name="viewport" content="width=device-width" ...
- Json数组操作小记 及 JSON对象和字符串之间的相互转换
[{"productid":"1","sortindex":"2"},{"productid":&q ...
- JS中实现JSON对象和JSON字符串之间的相互转换
对于主流的浏览器(比如:firefox,chrome,opera,safari,ie8+),浏览器自己提供了JSON对象,其中的parse和stringify方法实现了JSON对象和JSON字符串之间 ...
- JSON对象与字符串之间的相互转换 - CSDN博客
原文:JSON对象与字符串之间的相互转换 - CSDN博客 <html> <head> <meta name="viewport" content=& ...
- java中基本数据类型、包装类及字符串之间的相互转换
基本数据类型:不支持面向对象的编程机制(没有属性和方法),即不支持面向对象,之所以提供8中基本数据类型,是为了方便常规数据的处理. 包装类:通过包装类可以将基本数据类型的值包装为引用数据类型的对象,使 ...
- python 日期、时间处理,各种日期时间格式/字符串之间的相互转换究竟是怎样的?
模块函数说明 ''' date 日期对象,常用的属性有year,month,day time 时间对象,常用的属性有hour,minute,second,毫秒 datetime 日期时间对象,常用的属 ...
- 【Python】bytes和hex字符串之间的相互转换。
反复在几个环境上折腾码流的拼装解析和可读化打印,总是遇到hex字符串和bytes之间的转换,记录在这里吧. 1. 在Python2.7.x上(更老的环境真心折腾不起),hex字符串和bytes之间的转 ...
- Java字节、十进制、十六进制、字符串之间的相互转换
1. 字节转10进制 直接使用(int)类型转换. /* * 字节转10进制 */ public static int byte2Int(byte b){ int r = (int) b; retur ...
- JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()和parse()方法. JSON.stringify(obj)将JSO ...
随机推荐
- windows大全
1.win7系统如何显示隐藏的文件 参考连接:https://jingyan.baidu.com/article/da1091fbc6c7d2027849d628.htm ...
- 单例模式-java
/** * The MIT License * Copyright (c) 2014-2016 Ilkka Seppälä * <p> * Permission is hereby gra ...
- 【c# 学习笔记】c#中的类
1.什么是类: 在c#中类是一种数据结构,它可以包括数据成员.函数成员(方法.属性.事件.索引器.索引符.实例构造函数.静态构造函数和析构函数.及嵌套类型). 属性是,类中字段和方法的结合体,通过定义 ...
- Centos7安装gitlab11 学习笔记之基础概念、部署安装、权限管理、issue管理
一.基础介绍 1.简介 一个基于GIT的源码托管解决方案 基于rubyonrails开发 集成了nginx postgreSQL redis sidekiq等组件 2.安装要求 2g内存以上,有点占内 ...
- nginx+keepalived互为主主高可用配置
和nginx主从安装配置都一样 就是配置文件 多加个vip 里面具体要改的 请看下面的配置文件 直接master1上keepalived.conf配置文件内容: ! Configuration ...
- zabbix 部署包安装
关于zabbix的安装方式,官网提供了几种方法,分别是:部署包安装.源码安装.容器安装.容器安装我之前已经写过一篇,而现在这一篇是关于部署包安装的. 按照官网的说法,我们需要如下几个步骤: ...
- S12. Android 检查更新功能实现
[概述] 不需要从 App Store 或者指定官网直接下载,可以通过 App 直接更新到最新版本. [流程设计] 显示当前版本信息以及版本更新日志 提供 “检查更新” 按钮,点击事件处理逻辑: 1) ...
- [转帖]hdfs hbase hive hbase适用场景
hdfs hbase hive hbase适用场景 https://www.cnblogs.com/liyulong1982/p/6001822.html Hive 不想用程序语言开发MapReduc ...
- django授权-01--oauth2
oauth2的提供商:认证服务器 oauth2的消费者:目标服务器 如果目标服务器与认证服务器不一样的话,相当于目标服务器向认证服务器获取用户的信息 如果目标服务器和认证服务器一样的话,相当于用户获取 ...
- (五)Respose 知识点总结 (来自那些年的笔记)
目录 HttpServletResponse简介 向客户机写数据 HttpServletResponse应用 打印中文,让浏览器显示不乱码 : 下载文件 输出随机图片(验证码) 不要缓存 图片的src ...