前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go语言学习-类型转换

go语言学习-类型转换

作者头像
solate
发布2019-07-19 18:15:17
9230
发布2019-07-19 18:15:17
举报
文章被收录于专栏:solate 杂货铺solate 杂货铺

go语言学习-类型转换

快速使用

代码语言:javascript
复制
string => int :  i, err = strconv.Atoi(s)
string => bool : strconv.ParseBool("true")
string => float32 : strconv.ParseFloat(s, 32)
string => float64 : strconv.ParseFloat(s, 64)
string => uint : strconv.ParseUint()
string => int32/int64 : strconv.ParseInt(s, 10, 32)
string => []byte : []byte(string)
16进制string => int32/int64 : strconv.ParseInt(s, 0, 32)

[]byte => string : string([]byte)
[]byte => int : binary包处理, 查看下面

int => string : s = strconv.Itoa(i)  
int => int32  : i = int32(num)
int => int64 : i = int64(num)
int64/int32 => int : i = int(num)
int64 => string : strconv.FormatInt(int64, 10)
int64 => time.Duration : time.Duration(int64)
int32 => byte : bytes.NewBuffer() 看下面 int 和 byte 互转
int => float64 : float64(num) 

uint64 to string : strconv.FormatUint(unit64, 10) 

bool => string : strconv.FormatBool(true)

float64 => string : strconv.FormatFloat(float64(12), 'f', -1, 64) 
            或者 fmt.Sprintf("%.2f", float64)

float64/float32 => int : int64()/int32

数组到切片
array => slice : 
1) copy(array[:], slice[0:4])  | 全部 copy(array[:], slice)
2) for
for index, b := range someSlice {
    array[index] = b
}

切片到数组
slice=>array :    array[:]

详细说明

1.字符串到整形(string to int):ParseInt 返回的是 int64

代码语言:javascript
复制
var s string = "1"
var i int

i, err = strconv.Atoi(s) 或者 i, err = strconv.ParseInt(s, 10, 0)


// ParseInt 将字符串转换为 int64 类型
// s:要转换的字符串
// base:进位制(2 进制到 36 进制)
// bitSize:指定整数类型(0:int、8:int8、16:int16、32:int32、64:int64)
// 返回转换后的结果和转换时遇到的错误
// 如果 base 为 0,则根据字符串的前缀判断进位制(0x:16,0:8,其它:10)

//i 为int64 可以直接赋值
var i int64
i, _ = strconv.ParseInt("12", 10, 0)

//i 为int 不可以直接赋值
var i int
num, err := strconv.ParseInt(s, 10, 0)
i = int(num)

//16进制字符串
in,err := strconv.ParseInt("0x3515", 0,64)
fmt.Println(in, err)

2.字符串到bool (string to bool)

代码语言:javascript
复制
/**
    true: "1", "t", "T", "true", "TRUE", "True"
    false: "0", "f", "F", "false", "FALSE", "False"
    其他err 不为空, 返回false
*/

 b, err = strconv.ParseBool("true")

3.字符串到float32/float64 (string to float32/float64):

代码语言:javascript
复制
var s string = 1
var f float32
f, err = strconv.ParseFloat(s, 32)

var f2 float64
f2, err = strconv.ParseFloat(s, 64)

4.字符串到uint(string to unit):ParseUint 返回的是 uint64

代码语言:javascript
复制
/**
ParseInt 将字符串转换为 uint64 类型
param1: 值 可以是十六进制("FF")或者十进制字符串("12")
param2: 进制 "FF" 16进制   "12" 10进制
param3: 转换位数 8=>uint8 16=>unit16  64=>uint64
*/

fmt.Println(strconv.ParseUint("FF", 16, 8)) // 255

5.整形到字符串(int to string):

代码语言:javascript
复制
var i int = 1
var s string

s = strconv.Itoa(i) 或者 s = FormatInt(int64(i), 10) 或者 s = fmt.Sprintf("%d", i)

6.int64到string

代码语言:javascript
复制
// FormatInt 将 int64 型整数 i 转换为字符串形式
// base:进位制(2 进制到 36 进制)
// 大于 10 进制的数,返回值使用小写字母 'a' 到 'z'
func FormatInt(i int64, base int) string

i := int64(-2048)
fmt.Println(strconv.FormatInt(i, 2))  // -100000000000
fmt.Println(strconv.FormatInt(i, 8))  // -4000
fmt.Println(strconv.FormatInt(i, 10)) // -2048
fmt.Println(strconv.FormatInt(i, 16)) // -800
fmt.Println(strconv.FormatInt(i, 36)) // -1kw

7.整形到float32/float64 (int to float32/float64):

代码语言:javascript
复制
float32(i) / float64(i)

8.float到整形

int to int32/int64 => int32()/int64()

代码语言:javascript
复制
var value2 int32
value1 := 64 // value1将会被自动推导为int类型
//value2 = value1 // 编译错误
value2 = int32(value1) // 编译通过

9.float到string

代码语言:javascript
复制
// 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


var str string
str = strconv.FormatFloat(float64(12), 'f', -1, 64)



f := 100.12345678901234567890123456789
fmt.Println(strconv.FormatFloat(f, 'b', 5, 32)) // 13123382p-17
fmt.Println(strconv.FormatFloat(f, 'e', 5, 32)) // 1.00123e+02
fmt.Println(strconv.FormatFloat(f, 'E', 5, 32)) // 1.00123E+02
fmt.Println(strconv.FormatFloat(f, 'f', 5, 32)) // 100.12346
fmt.Println(strconv.FormatFloat(f, 'g', 5, 32)) // 100.12
fmt.Println(strconv.FormatFloat(f, 'G', 5, 32)) // 100.12
fmt.Println(strconv.FormatFloat(f, 'b', 30, 32)) // 13123382p-17
fmt.Println(strconv.FormatFloat(f, 'e', 30, 32)) // 1.001234588623046875000000000000e+02
fmt.Println(strconv.FormatFloat(f, 'E', 30, 32)) // 1.001234588623046875000000000000E+02
fmt.Println(strconv.FormatFloat(f, 'f', 30, 32)) // 100.123458862304687500000000000000
fmt.Println(strconv.FormatFloat(f, 'g', 30, 32)) // 100.1234588623046875
fmt.Println(strconv.FormatFloat(f, 'G', 30, 32)) // 100.1234588623046875


或者使用
var str string
var f float32 = 666.666
str = fmt.Sprintf("%.2f", f)

10.bool到string

代码语言:javascript
复制
fmt.Println(strconv.FormatBool(0 < 1)) // true
fmt.Println(strconv.FormatBool(0 > 1)) // false

int 和 byte 互转

golang没有现成的方法只能通过binary包来解决

代码语言:javascript
复制
import "encoding/binary"
import "bytes"

示例

代码语言:javascript
复制
package main  
  
import (  
    "bytes"  
    "encoding/binary"  
    "fmt"  
    "strings"  
)  
  
func main() {  
    b := []byte{0x00, 0x00, 0x03, 0xe8}  
    b_buf := bytes.NewBuffer(b)  
    var x int32  
    binary.Read(b_buf, binary.BigEndian, &x)  
    fmt.Println(x)  
  
    fmt.Println(strings.Repeat("-", 100))  
  
    x = 1000  
    b_buf = bytes.NewBuffer([]byte{})  
    binary.Write(b_buf, binary.BigEndian, x)  
    fmt.Println(b_buf.Bytes())  
}

封装成方法

代码语言:javascript
复制
//整形转换成字节
func IntToBytes(n int64) []byte {
	var bytesBuffer bytes.Buffer
	binary.Write(&bytesBuffer, binary.BigEndian, n)
	return bytesBuffer.Bytes()
}

//字节转换成整形
func BytesToInt(b []byte) (x int64) {
	bytesBuffer := bytes.NewBuffer(b)
	binary.Read(bytesBuffer, binary.BigEndian, &x)
	return
}

类型比较

两个不同类型的整型数不能直接比较,比如int8类型的数和int类型的数不能直接比较,但各种类型的整型变量都可以直接与字面常量(literal)进行比较

代码语言:javascript
复制
var i int32
var j int64
i, j = 1, 2
if i==j { // 编译错误
    fmt.Println("i and j are equal.")
}
if i==1||j==2 {// 编译通过
    fmt.Println("i and j are equal.")
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • go语言学习-类型转换
    • 快速使用
      • 详细说明
        • int 和 byte 互转
          • 类型比较
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档