Go - 基本数据类型和其字符串表示之间转换
1. 基本数据类型和其字符串表示之间转换
基本类型的值,都有一个字符串表示,如数字类型值
1字符串表示为"1",字符的编码为Unicode或者UTF-8,数字的编码是int,底层存储的数据格式本质上不一样,基本类型的转换本质上只是文法语义上的转化
1.1 Go 语言基本类型
- 整数 : 有符号
int int8 int16 int32 int64无符号:uint uint8 uint16 uint32 uint64 - 小数:
float32 flat63 - 字符串:
string
1.2 转换过程中可能得错误
基本数据类型到字符串表示的转换,不会出错,但字符表示到基本类型的转换可能会有以下错误
- 超出目标类型的表示范围
package main
import (
"fmt"
"strconv"
)
func main() {
numStr := "400"
// 400 数字值已经超出int8(-128, 127)类型表示的范围
num, err := strconv.ParseInt(numStr, 10, 8)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("conv result:", num)
}
// 输出:strconv.ParseInt: parsing "400": value out of range
- 不符合目标类型语法
package main
import (
"fmt"
"strconv"
)
func main() {
numStr := "xx"
// xx字符串值无法表示为对应的整数值
num, err := strconv.ParseInt(numStr, 10, 8)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("conv result:", num)
}
// 输出:strconv.ParseInt: parsing "400": value out of range
2. 转换
- 字符串与带引号之间转化
package main
import (
"fmt"
"strconv"
)
func main() {
name := "dream_fish n"
// 添加上引号
fmt.Println("result:", strconv.Quote(name))
// 去除引号
school := `"University"`
school_, err := strconv.Unquote(school)
if err != nil {
fmt.Println("err:", err)
return
}
fmt.Println("result:", school_)
}
- 字符串与布尔类型之间的转换
字符串转
bool类型
package main
import (
"fmt"
"strconv"
)
func main() {
// 包含所有可以转bool类型的值
boolStringValues := []string{"1", "0", "t", "f", "true", "false", "True", "False"}
// 进行转换
for _, b := range boolStringValues {
result, err := strconv.ParseBool(b)
if err != nil {
fmt.Printf("parse value: %s err:%s\n", b, err)
continue
}
fmt.Printf("parse value: %s err:%s\n", b, result)
}
}
bool类型转字符串
package main
import (
"fmt"
"strconv"
)
func main() {
// 包含布尔类型的值
boolValues := []bool{false, true}
// 进行转换
for _, b := range boolValues {
result := strconv.Quote(strconv.FormatBool(b))
fmt.Printf("format value: %t err:%s\n", b, result)
}
}
- 数值与字符串之间的转换
字符串转数值
package main
import (
"fmt"
"strconv"
)
func main() {
// 转换为 int8类型
int8String := "122"
// 第一个参数是需要转换的字符串,第二个参数是int类型的进制,第三个参数是bit位数
intNum, err := strconv.ParseInt(int8String, 10, 8)
if err != nil {
fmt.Println("err:", err)
}
fmt.Println("int8 num:", intNum)
// 字符串正整数
uintNum, err := strconv.ParseUint(int8String, 10, 8)
if err != nil {
fmt.Println("err:", err)
}
fmt.Println("uint8 num:", uintNum)
// 字符串转浮点数
floatNumStr := "67.9"
floatNum, err := strconv.ParseFloat(floatNumStr, 64)
if err != nil {
fmt.Println("err:", err)
}
fmt.Println("float64 num:", floatNum)
}
数值转字符串
strconv包的Format系列方式
package main
import (
"fmt"
"strconv"
)
func main() {
// 整肃转字符串
intNum := int64(8)
fmt.Printf("%s\n", strconv.FormatInt(intNum, 10))
// 浮点数转字符串
result := strconv.FormatFloat(88.9, 'f', 2, 64)
fmt.Println("float to str:", result)
// bool类型转字符串
fmt.Println("bool to str:", strconv.FormatBool(true))
// 无符号整肃
fmt.Println("uint to str", strconv.FormatUint(111, 10))
}
fmt包Sprint系列方式
package main
import (
"fmt"
)
func main() {
// 整肃转字符串
intValue := int64(8)
boolValue := true
floatValue := 44.2
uintValue := 33
result := fmt.Sprintf("int: %d, bool: %t, float: %f, unit: %d", intValue, boolValue, floatValue, uintValue)
fmt.Printf(result)
}
strconv包的Atoi与Itoa方法,其实是ParseInt(s, 10, 0)FormatInt(i, 10)的简写
package main
import (
"fmt"
"strconv"
)
func main() {
// int类型值转换为字符串
result := strconv.Itoa(100)
fmt.Println(result)
// 字符串值换换为int类型的值
intString := "200"
intValue, err := strconv.Atoi(intString)
if err != nil {
panic(err)
}
fmt.Println(intValue)
}
3. Append系方法
添加转成基本类型转换成字符串表示的
package main
import (
"fmt"
"strconv"
)
func main() {
// 基础数据类型
intValue := int64(100)
boolValue := true
floatValue := 5.4
buf := []byte("result:")
resultValue := strconv.AppendFloat(buf, floatValue, 'f', 2, 64)
fmt.Println(string(resultValue))
resultValue = strconv.AppendInt(buf, intValue, 10)
fmt.Println(string(resultValue))
resultValue = strconv.AppendBool(buf, boolValue)
fmt.Println(string(resultValue))
}
4. 总结
Parse系列方法,将字符串表示尝试转换为基础类型,Formation系列方法将基本类型转换为字符串表示,Append方法是一个将基本类型的字符串表示添加到字节切片的快捷方式
Go - 基本数据类型和其字符串表示之间转换的更多相关文章
- HTML5 Blob与ArrayBuffer、TypeArray和字符串String之间转换
1.将String字符串转换成Blob对象 //将字符串 转换成 Blob 对象 var blob = new Blob(["Hello World!"], { type: 'te ...
- [转] HTML5 Blob与ArrayBuffer、TypeArray和字符串String之间转换
1.将String字符串转换成Blob对象 //将字符串 转换成 Blob 对象 var blob = new Blob(["Hello World!"], { type: 'te ...
- python 在Unicode和普通字符串 str 之间转换
unicodestring = u"Hello world" # 将Unicode转化为普通Python字符串:"encode" utf8string = un ...
- SSIS无法在unicode和非unicode 字符串数据类型之间转换
场景:SSIS从oracle抽到sqlserver,一个表对表到数据仓库ODS层的抽取,没有任何逻辑结果遇到问题: SSIS无法在unicode和非unicode 字符串数据类型之间转换 如下图2个字 ...
- SSIS 无法在 unicode 和非 unicode 字符串数据类型之间转换
最近在学SSIS,遇到一个问题,把平面文件源的数据导入到EXCEL中. 平面文件源的对象是CSV,读进来的PhoneNumber是 DT_STR 然后倒入Excel 对应列建立的是longtext 一 ...
- 基本数据类型、包装类、String之间的转换
package 包装类; /** *8种基本数据类型对应一个类,此类即为包装类 * 基本数据类型.包装类.String之间的转换 * 1.基本数据类型转成包装类(装箱): * ->通过构造器 : ...
- Java中几种常用数据类型之间转换的方法
Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...
- Python基础4:数据类型:数字 字符串 日期
[ Python 数据类型 ] 我们知道,几乎任何编程语言都具有数据类型:常见的数据类型有:字符串.整型.浮点型以及布尔类型等. Python也不例外,也有自己的数据类型,主要有以下几种: 1.数字: ...
- 有两个地方,用到了javabean对象和属性字符串值之间的转换
1.有两个地方,用到了javabean对象和属性字符串值之间的转换 2.一个是接入层spring mvc,将json字符串参数转换为javaBean.通过@RequestBody javaBean方式 ...
- Java基础97 json插件的使用(java对象和json字符串对象之间的转换)
1.需要用到的包 2.实例 实体类 people package com.shore.entity; /** * @author DSHORE/2019-4-19 * */ public class ...
随机推荐
- JAVA 获取 URL 指定参数的值
JAVA 获取 URL 指定参数的值 @Test void regexTest() { String url = "https://www.cnblogs.com/vipsoft/p/152 ...
- Go--日志
一.Logger go语言默认提供的日志功能,包为ttps://golang.org/pkg/log/ 优势: 使用非常简单,可以设置任何io.Writer作为日志记录输出并向其发送要写入的日志 劣势 ...
- 揭秘2022冬奥黑科技,阿里云视频云「Cloud ME」如何实现全息会面?
2022北京冬奥会本是一届非凡的存在,这是有史以来第一次将奥运会所需的全部核心系统全面上云,以数字化技术创造奥运的新纪元. 但绿色奥运不止如此,在面临 Covid-19 限制和物理隔阂之下,千里之外, ...
- 素数算法补充之"筛法"
国庆中秋双节,就不写太长的文章了. 补充和复习一下以前没写的素数区间筛法算法吧 部分证明过程来自OI wiki 素数筛法 如果我们想要知道小于等于 \(n\) 有多少个素数呢? 一个自然的想法是我们对 ...
- 《深入理解计算机系统》(CSAPP)读书笔记 —— 第五章 优化程序性能
写程序最主要的目标就是使它在所有可能的情况下都正确工作.一个运行得很快但是给出错误结果的程序没有任何用处.程序员必须写出清晰简洁的代码,这样做不仅是为了自己能够看懂代码,也是为了在检査代码和今后需要修 ...
- S3C2440移植linux3.4.2内核之内核框架介绍及简单修改
目录 uboot启动内核分析 简单配置内核 编译内核 设置机器ID 修改晶振 uboot启动内核分析 进入cmd_bootm.c,找到对应的bootm命令对应的do_bootm(): int do ...
- 使用JSEncrypt加密解密
最近项目中使用非对称加密JSEncrypt. uni-app中先安装第三方npm包jsencrypt util文件夹下新建一个jsencrypt.js文件 1 import JSEncrypt fro ...
- ReentrantLock 可重入锁总结
本文为博主原创,未经允许不得转载: ReentrantLock 是一种内置锁,也叫可重入锁(ReentrantLock),它允许线程再次获取已持有的同步锁,这样防止死锁的发生.在使用Reentrant ...
- 【KEIL 】Options for File
使用" 项目 "窗口的上下文菜单打开此对话框 :菜单选项项目.该对话框包括带有三态替代项的复选框: -已选中且呈灰色 -属性是从父对象继承的.- 选中和白色 -为对象单独设置的属性 ...
- css : object-fit 兼容 ie 的解决方案
通过 github 搜索 object-fit ie , 借鉴大佬兼容 ie 的经验. 下载解压到文件夹 , 打开测试目录 , 查看 demo 使用 ie 打开demo , 查看显示效果 : 代码 ...