Go语言中其他数据与字符串类型的转换
1 概述
Go语言是强类型语言,因此总会需要将字符串转成需要的类型。比如整型和字符串转换,字符串和布尔型的转换等。本文就介绍如何完成这些转换,以下是Go语言关于字符串转换的整理说明,主要是与切片类型的转换,和 strconv 包的使用。
2 与切片的转换
切片类型可以和字符串类型相互转换。
fmt.Println([]rune("Hello小韩说课"))
// [72 101 108 108 111 23567 38889 35828 35838]
fmt.Println(string([]rune{72, 101, 108, 108, 111, 23567, 38889, 35828, 35838}))
// Hello小韩说课
fmt.Println([]byte("Hello"))
// [72 101 108 108 111]
fmt.Println(string([]byte{72, 101, 108, 108, 111}))
// Hello
3 strconv 包
会将常用的放在前面:
strconv.Atoi(s string) (int, error)
转换字符串 s string 到整型。
v := "10"
if s, err := strconv.Atoi(v); err == nil {
fmt.Printf("%T, %v", s, s)
}
// int, 10
// 相当于
strconv.ParseInt(s, 10, 0)
strconv.Itoa(i int) string
将整型转 i int 换为字符串
i := 10
s := strconv.Itoa(i)
fmt.Printf("%T, %v\n", s, s)
// string, 10
strconv.ParseFloat(s string, bitSize int) (float64, error)
解析字符 str string 串为浮点,可以设置位数。
v := "3.1415926535"
if s, err := strconv.ParseFloat(v, 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
// float64, 3.1415927410125732
if s, err := strconv.ParseFloat(v, 64); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
// float64, 3.1415926535
strconv.ParseInt(s string, base int, bitSize int) (i int64, err error)
解析字符 str string 串为整数,可以设置进制、位数。
v32 := "-354634382"
if s, err := strconv.ParseInt(v32, 10, 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseInt(v32, 16, 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
// int64, -354634382
v64 := "-3546343826724305832"
if s, err := strconv.ParseInt(v64, 10, 64); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseInt(v64, 16, 64); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
// int64, -3546343826724305832
strconv.FormatFloat(f float64, fmt byte, prec, bitSize int) string
将浮点数 f float64 转换为字符串,可以设置格式 fmt(b,e,E,f,g,G)、精度prce、位数(32或64)。
v := 3.1415926535
s32 := strconv.FormatFloat(v, 'E', -1, 32)
fmt.Printf("%T, %v\n", s32, s32)
// string, 3.1415927E+00
s64 := strconv.FormatFloat(v, 'E', -1, 64)
fmt.Printf("%T, %v\n", s64, s64)
// string, 3.1415926535E+00
strconv.FormatInt(i int64, base int) string
将整数 i int64 转换为字符串,可以指定进制 base。
v := int64(-42)
s10 := strconv.FormatInt(v, 10)
fmt.Printf("%T, %v\n", s10, s10)
// string, -42
s16 := strconv.FormatInt(v, 16)
fmt.Printf("%T, %v\n", s16, s16)
// string, -2a
strconv.AppendBool(dst []byte, b bool) []byte
将布尔值 b bool 以字符串形式追加到 dst []byte 中。
b := []byte("bool:")
b = strconv.AppendBool(b, true)
fmt.Println(string(b))
// bool:true
// 相当于
append(dst []byte, strconv.FormatBool(b bool))
strconv.AppendFloat(dst []byte, f float64, fmt byte, prec, bitSize int) []byte
将浮点数 f float64 以字符串形式追加到 dst []byte 中,可以设置格式 fmt(b,e,E,f,g,G)、精度prce、位数(32或64)。
b32 := []byte("float32:")
b32 = strconv.AppendFloat(b32, 3.1415926535, 'E', -1, 32)
fmt.Println(string(b32))
// float32:3.1415927E+00
b64 := []byte("float64:")
b64 = strconv.AppendFloat(b64, 3.1415926535, 'E', -1, 64)
fmt.Println(string(b64))
// float64:3.1415926535E+00
// 相当于
append(dst []byte, strconv.FormatFloat(3.1415926535, 'E', -1, 64))
strconv.AppendInt(dst []byte, i int64, base int) []byte
将整数 i int64 以字符串形式追加到 dst []byte 中,可以指定进制。
b10 := []byte("int (base 10):")
b10 = strconv.AppendInt(b10, -42, 10)
fmt.Println(string(b10))
// int (base 10):-42
b16 := []byte("int (base 16):")
b16 = strconv.AppendInt(b16, -42, 16)
fmt.Println(string(b16))
// int (base 16):-2a
// 相当于
append(dst []byte, strconv.FormatInt(-42, 10))
append(dst []byte, strconv.FormatInt(-42, 16))
strconv.AppendQuote(dst []byte, s string) []byte
将字符串 s string 以字符串双引号定义的形式追加到 dst []byte 中。
b := []byte("quote:")
b = strconv.AppendQuote(b, `"Fran & Freddie's Diner"`)
fmt.Println(string(b))
// quote:"\"Fran & Freddie's Diner\""
// 相当于
append(dst []byte, strconv.Quote(`"Fran & Freddie's Diner"`))
strconv.AppendQuoteRune(dst []byte, r rune) []byte
将字符 r rune 以字单引号定义的形式追加到 dst []byte 中。
b := []byte("rune:")
b = strconv.AppendQuoteRune(b, '☺')
fmt.Println(string(b))
// rune:'☺'
// 相当于
append(dst []byte, strconv.QuoteRune('☺'))
strconv.AppendQuoteRuneToASCII(dst []byte, r rune) []byte
将字符 r rune 以字单引号定义的形式追加到 dst []byte 中,对于非 ASCII 字符 r 会以转义字符的形式出现。
b := []byte("rune (ascii):")
b = strconv.AppendQuoteRuneToASCII(b, '☺')
fmt.Println(string(b))
// rune (ascii):'\u263a'
// 相当于
append(dst []byte, strconv.QuoteRuneToASCII('☺'))
strconv.AppendQuoteToASCII(dst []byte, s string) []byte
将字符串 s string 以字符串双引号定义的形式追加到 dst []byte 中,非 ASCII 字符以转义形式表示。
b := []byte("quote (ascii):")
b = strconv.AppendQuoteToASCII(b, `"Fran & Freddie's Diner"`)
fmt.Println(string(b))
// quote (ascii):"\"Fran & Freddie's Diner\""
// 相当于
append(dst []byte, strconv.QuoteToASCII(`"Fran & Freddie's Diner"`))
strconv.AppendUint(dst []byte, i uint64, base int) []byte
将无符号整数 i uint64 以字符串形式追加到 dst []byte 中,可以指定进制。
b10 := []byte("uint (base 10):")
b10 = strconv.AppendUint(b10, 42, 10)
fmt.Println(string(b10))
// uint (base 10):42
b16 := []byte("uint (base 16):")
b16 = strconv.AppendUint(b16, 42, 16)
fmt.Println(string(b16))
// uint (base 16):2a
strconv.CanBackquote(s string) bool
检测字符串 s string 是否可以不被修改的表示为一个单行的、没有空格和tab之外控制字符的反引号字符串。
fmt.Println(strconv.CanBackquote("Fran & Freddie's Diner ☺"))
// true
fmt.Println(strconv.CanBackquote("`can't backquote this`"))
// false
strconv.FormatBool(b bool) string
将布尔 b bool 转换为字符串。
v := true
s := strconv.FormatBool(v)
fmt.Printf("%T, %v\n", s, s)
// string, true
strconv.FormatUint(i uint64, base int) string
将无符号整数 i uint64 转换为字符串,可以指定进制 base。
v := uint64(42)
s10 := strconv.FormatUint(v, 10)
fmt.Printf("%T, %v\n", s10, s10)
// string, 42
s16 := strconv.FormatUint(v, 16)
fmt.Printf("%T, %v\n", s16, s16)
// string, 2a
strconv.IsPrint(r rune) bool
检测字符 r rune 是否为打印字符。
c := strconv.IsPrint('\u263a')
fmt.Println(c)
// true
bel := strconv.IsPrint('\007')
fmt.Println(bel)
// false
strconv.ParseBool(str string) (bool, error)
解析字符 str string 串为布尔型。
v := "true"
if s, err := strconv.ParseBool(v); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
// bool, true
strconv.ParseUint(s string, base int, bitSize int) (uint64, error)
解析字符 str string 串为无符号整数,可以设置进制、位数。
v := "42"
if s, err := strconv.ParseUint(v, 10, 32); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
// uint64, 42
if s, err := strconv.ParseUint(v, 10, 64); err == nil {
fmt.Printf("%T, %v\n", s, s)
}
// uint64, 42
strconv.Quote(s string) string
返回字符串 s string 双引号字面值表示,控制字符、不可打印字符会进行转义,如 \t,\n,\xFF,\u0100。
s := strconv.Quote(`"Fran & Freddie's Diner ☺"`)
fmt.Println(s)
// "\"Fran & Freddie's Diner\t☺\""
strconv.QuoteRune(r rune) string
返回字符 r rune 单引号字面值表示,控制字符、不可打印字符会进行转义,如\t,\n,\xFF,\u0100。
s := strconv.QuoteRune('☺')
fmt.Println(s)
// '☺'
strconv.QuoteRuneToASCII(r rune) string
返回字符 r rune 单引号字面值表示,控制字符、不可打印字符、非ASCII字符会进行转义。
s := strconv.QuoteRuneToASCII('☺')
fmt.Println(s)
// '\u263a'
strconv.QuoteToASCII(s string) string
返回字符串 s string 双引号字面值表示,控制字符和不可打印字符、非ASCII字符会进行转义。
s := strconv.QuoteToASCII(`"Fran & Freddie's Diner ☺"`)
fmt.Println(s)
// "\"Fran & Freddie's Diner\t\u263a\""
strconv.Unquote(s string) (string, error)
返回一个单引号、双引号、反引号包围的语法字符串 s string,解析它并返回它表示的值。若为反引号括起来的,函数会认为s是go字符字面值,返回一个单字符的字符串。
s, err := strconv.Unquote("You can't unquote a string without quotes")
fmt.Printf("%q, %v\n", s, err)
// "", invalid syntax
s, err = strconv.Unquote("\"The string must be either double-quoted\"")
fmt.Printf("%q, %v\n", s, err)
// "The string must be either double-quoted", <nil>
s, err = strconv.Unquote("`or backquoted.`")
fmt.Printf("%q, %v\n", s, err)
// "or backquoted.", <nil>
s, err = strconv.Unquote("'\u263a'") // single character only allowed in single quotes
fmt.Printf("%q, %v\n", s, err)
// "☺", <nil>
s, err = strconv.Unquote("'\u2639\u2639'")
fmt.Printf("%q, %v\n", s, err)
// "", invalid syntax
strconv.UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error)
返回一个表示字符的语法字符串 s string,可以设置字符串定义语法 quote byte 双引号或者反引号。解析它并返回四个值:
v, mb, t, err := strconv.UnquoteChar(`\"Fran & Freddie's Diner\"`, '"')
if err != nil {
log.Fatal(err)
}
fmt.Println("value:", string(v))
// value: "
fmt.Println("multibyte:", mb)
// multibyte: false
fmt.Println("tail:", t)
// tail: Fran & Freddie's Diner\"
完!
原文出自:小韩说课
微信关注:小韩说课
Go语言中其他数据与字符串类型的转换的更多相关文章
- 【数据传输 2】批量导入的前奏:将Excel表中的数据转换为DataTable类型
导读:我们知道,在数据库中,数据集DataSet是由多张DataTable表组成.所以,如果我们需要将数据从外部导入到数据库中,那么要做的很重要的一步是将这些数据转换为数据库可以接受的结构.今天在用S ...
- C语言中存储多个字符串的两种方式
C语言中存储多个字符串的两种方式 方式一 二维字符串数组 声明: char name[][] = { "Justinian", "Momo", " ...
- 【转】java中byte数组与int类型的转换(两种方式)----不错
原文网址:http://blog.csdn.net/piaojun_pj/article/details/5903009 java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法, ...
- C语言中强制数据类型转换(转)
原文地址不详 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0-255(有些 ...
- C语言中的数组与字符串
1. 数组与指针: 对于数组,需要注意两点:1, C语言中只有一维数组, 而且数组的大小必须在编译期就作为一个常数确定下来: 2. 对于一个数组,我们只能做两件事:确定数组的大小 和 获得指向该数组下 ...
- C语言中字符数据的输入和输出
字符的输出 C语言中使用putchar函数来输出字符数据 #include <stdio.h> int main() { char a,b,c,d; //定义字符变量a,b,c,d a = ...
- c语言中的结构体指针类型的cast
1.我们在c语言中会经常碰到强制类型转换. 在这,我介绍一种结构pointer类型转换,但是有前提(有点类似于c++中的继承中的子父对象的cast). 简单的介绍一下: 首先我们要知道一个结构的指针, ...
- C 语言中实现数据与方法的封装
在 C 语言中可以用结构体代替类,用函数指针代替成员方法,实现数据成员与成员方法的封装,在客户端写出的程序与 C++ 类似,唯一的不同是 C 语言中调用函数指针成员时必须将本对象的地址传给函数,因为 ...
- VC++和C语言中常见数据类型转换为字符串的方法
1.短整型(int) itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制 itoa(i,temp,2); ///按二进制方式转换 2.长整型(long) lt ...
随机推荐
- 深入浅出SharePoint2010——请假系统无代码篇之数据框架设计
文档库SOP:上传用户操作手册等系统相关文档. 员工信息列表EmployeeInfo:用来存储员工基本信息.直属领导和假卡信息. 请假申请列表LeaveRequest:申请人Requester填写请假 ...
- 编程题A+B Format的总结(第二次作业<一>)
Github链接地址:https://github.com/Startup-try/object-oriented 这个题目现在想想没有那么难,其实还挺简单的,但是中午花了好长的时间还不懂得怎么做,感 ...
- CXF+JAXB处理复杂数据
CXF+JAXB处理复杂数据 CXF默认使用JAXB 来实现对象和XML之间的映射.在前面的例子 中,使用CXF发布的Webservice,其方法的参数和返回值都是简单类型. 本文讨论对象复杂性的 ...
- tcp的三次握手:通信的本质:通信通知与信息交换
tcp的三次握手:通信的本质:通信通知与信息交换
- Cordova Android源代码分析系列一(项目总览和CordovaActivity分析)
版权声明:本文为博主offbye西涛原创文章.未经博主同意不得转载. https://blog.csdn.net/offbye/article/details/31776833 PhoneGap/Co ...
- My97datepicker使用方法
My97DatePicker是一款非常灵活好用的日期控件.使用非常简单. 1.下载My97DatePicker组件包 2.在页面中引入该组件js文件: <script type=&quo ...
- virtualbox+vagrant学习-4-Vagrantfile-8-WinSSH
WinSSH WinSSH通信器是专门为OpenSSH的Windows本机端口构建的.它不依赖于类posix的环境,这种环境消除了额外的软件安装(如cygwin)以获得适当功能的需求. 想获得更多的信 ...
- (转)ci
1 从代码管理器签出源文件 2 修改代码 3 编译代码 4 遇到错误,转到2继续修改直到达到预期 5 运行单元测试,期望所有的测试绿色(通过) 6 单元测试出错,转入2 7 重构代码,按 ...
- yum 安装 php5.6
yum 安装 php5.6 安装 PHP rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-8.noa ...
- TabActivity 、fragemnt+fragment 和 Fragment+Viewpager 优缺点
1 TabActivity : 1 过时了 . 2 activity . 是作为android的四大组件... 重量级的家伙 ViewGroup : 特别麻 ...