第64篇 笔记-Go string 类型的转换

目录

1. int 到 string

2. float 到 string

3. bool 到 string

4. string 到 int

5. string 到 float

6. string 到 bool

7. string 到 time

8. time 到 string

9. 示例:基本数据类型转 string

10. 示例:string 转基本数据类型

11. String Functions

12. String Formatting

13.字符串字面量

14.字符处理


1. int 到 string

// int 到 string
string:=strconv.Itoa(int)  

// int64 到 string
  // FormatUint 将 int 型整数 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

//Uint到string
  // FormatUint 将 uint 型整数 i 转换为字符串形式
  // base:进位制(2 进制到 36 进制)
  // 大于 10 进制的数,返回值使用小写字母 'a' 到 'z'

func FormatUint(i uint64, base int) string

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

 

2. float 到 string

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

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

 

3. bool 到 string

fmt.Println(strconv.FormatBool(0 < 1)) // true
fmt.Println(strconv.FormatBool(0 > 1)) // false

 

4. string 到 int

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

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

// string 到 int8,10进制
fmt.Println(strconv.ParseInt("123", 10, 8))

// string 到 int64,10进制
fmt.Println(strconv.ParseInt("123", 10, 64))

// string到uint
  // ParseUint 功能同 ParseInt 一样,只不过返回 uint 类型整数
func ParseUint(s string, base int, bitSize int) (n uint64, err error)

// string 到 uint8,16进制
fmt.Println(strconv.ParseUint("FF", 16, 8))

 

5. string 到 float

// s:要转换的字符串
  // bitSize:指定浮点类型(32:float32、64:float64)
  // 如果 s 是合法的格式,而且接近一个浮点值,
  // 则返回浮点数的四舍五入值(依据 IEEE754 的四舍五入标准)
  // 如果 s 不是合法的格式,则返回“语法错误”
  // 如果转换结果超出 bitSize 范围,则返回“超出范围”

func ParseFloat(s string, bitSize int) (f float64, err error)

s := "0.12345678901234567890"
f, err := strconv.ParseFloat(s, 32)
fmt.Println(f, err)               // 0.12345679104328156

6. string 到 bool

// ParseBool 将字符串转换为布尔值
  // 它接受真值:1, t, T, TRUE, true, True
  // 它接受假值:0, f, F, FALSE, false, False.
  // 其它任何值都返回一个错误

strconv.ParseBool("1")

 

7. string 到 time

其中layout的时间必须是"2006-01-02 15:04:05"这个时间,不管格式如何,时间点一定得是这个,如:"Jan 2, 2006 at 3:04pm (MST)","2006-Jan-02"等。如换一个时间解析出来的时间就不对了,要特别注意这一点。

layout := ""2006-01-02 15:04:05.999999""
t, _ := time.Parse(layout, "2013-10-05 18:30:50")
fmt.Println(t.Year())
// 当前时区时间格式化转换
strTime := "2018-03-24T20:01:00+08:00"
tim, _:=time.ParseInLocation("2006-01-02T15:04:05+08:00", strTime, time.Local)

8. time 到 string

获取纳秒值

na:=time.Now().UnixNano()

获取毫秒值

na:=time.Now().UnixNano()//获取时间戳包含纳秒
fmt.Println(na / 1e6) //纳秒转毫秒
fmt.Println(na / 1e9) //纳秒转秒

获取秒值

miao:=time.Now().Unix()

time 转 string

time.Now().Format("2006-01-02 15:04")

年月日时分秒转time

the_time := time.Date(2014, 1, 7, 5, 50, 4, 0, time.Local)
unix_time := the_time.Unix()
fmt.Println(unix_time)

 

9. 示例:基本数据类型转 string

package main

import (
	"fmt"
	"strconv"
)

func main() {

	var num1 int = 99
	var num2 float64 = 23.456
	var b bool = true
	var myChar byte = 'h'
	var str string 

	// 第一种方式, fmt.Sprintf方法

	str = fmt.Sprintf("%d", num1)
	fmt.Printf("str type %T str=%q\n", str, str)

	str = fmt.Sprintf("%f", num2)
	fmt.Printf("str type %T str=%q\n", str, str)

	str = fmt.Sprintf("%t", b)
	fmt.Printf("str type %T str=%q\n", str, str)

	str = fmt.Sprintf("%c", myChar)
	fmt.Printf("str type %T str=%q\n", str, str)

	// 第二种方式, strconv 函数 
	var num3 int = 99
	var num4 float64 = 23.456
	var b2 bool = true

	str = strconv.FormatInt(int64(num3), 10)
	fmt.Printf("str type %T str=%q\n", str, str)
	
	// strconv.FormatFloat(num4, 'f', 10, 64)
	// 说明: 'f' 格式 10:表示小数位保留10位 64 :表示这个小数是float64
	str = strconv.FormatFloat(num4, 'f', 10, 64)
	fmt.Printf("str type %T str=%q\n", str, str)

	str = strconv.FormatBool(b2)
	fmt.Printf("str type %T str=%q\n", str, str)

	// strconv包中有一个函数Itoa
	var num5 int64 = 4567
	str = strconv.Itoa(int(num5))
	fmt.Printf("str type %T str=%q\n", str, str)

}

/*
str type string str="99"
str type string str="23.456000"
str type string str="true"
str type string str="h"
str type string str="99"
str type string str="23.4560000000"
str type string str="true"
str type string str="4567"
*/

 

10. 示例:string 转基本数据类型

package main

import (
	"fmt"
	"strconv"
)

func main() {

	var str string = "true"
	var b bool
	// b, _ = strconv.ParseBool(str)
	  // 1. strconv.ParseBool(str) 函数会返回两个值 (value bool, err error)
	  // 2. 因为我只想获取到 value bool ,不想获取 err 所以我使用_忽略
	b , _ = strconv.ParseBool(str)
	fmt.Printf("b type %T  b=%v\n", b, b)
	
	var str2 string = "1234590"
	var n1 int64
	var n2 int
	n1, _ = strconv.ParseInt(str2, 10, 64)
	n2 = int(n1)
	fmt.Printf("n1 type %T  n1=%v\n", n1, n1)
	fmt.Printf("n2 type %T n2=%v\n", n2, n2)

	var str3 string = "123.456"
	var f1 float64
	f1, _ = strconv.ParseFloat(str3, 64)
	fmt.Printf("f1 type %T f1=%v\n", f1, f1)

	//注意:需要能转换成有效数据,否则会返回默认值
	var str4 string = "hello"
	var n3 int64 = 11
	n3, _ = strconv.ParseInt(str4, 10, 64)
	fmt.Printf("n3 type %T n3=%v\n", n3, n3)

}

/*
b type bool  b=true
n1 type int64  n1=1234590
n2 type int n2=1234590
f1 type float64 f1=123.456
n3 type int64 n3=0
*/

 

11. String Functions

package main

import (
    "fmt"
    s "strings"
)

var p = fmt.Println

func main() {
    p("Contains:  ", s.Contains("test", "es"))          // 是否包含
    p("Count:     ", s.Count("test", "t"))              // 包含数量
    p("HasPrefix: ", s.HasPrefix("test", "te"))         // 是否以te开头
    p("HasSuffix: ", s.HasSuffix("test", "st"))         // 是否以st结尾
    p("Index:     ", s.Index("test", "e"))              // 序号
    p("Join:      ", s.Join([]string{"a", "b"}, "-"))   // 插入
    p("Repeat:    ", s.Repeat("a", 5))                  // 重复
    p("Replace:   ", s.Replace("foo", "o", "0", -1))    // 全部替换
    p("Replace:   ", s.Replace("foo", "o", "0", 1))     // 替换第几个
    p("Split:     ", s.Split("a-b-c-d-e", "-"))         // 按-切分为切片
    p("ToLower:   ", s.ToLower("TEST"))                 // 转小写字母
    p("ToUpper:   ", s.ToUpper("test"))                 // 转大写字母
    p()

    p("Len: ", len("hello"))                            // 字符长度
    p("Char:", "hello"[1])                              // 字符的utf-8编码
}

/*
Contains:   true
Count:      2
HasPrefix:  true
HasSuffix:  true
Index:      1
Join:       a-b
Repeat:     aaaaa
Replace:    f00
Replace:    f0o
Split:      [a b c d e]
ToLower:    test
ToUpper:    TEST

Len:  5
Char: 101
*/

 

12. String Formatting

package main

import (
    "fmt"
    "os"
)

type point struct {
    x, y int
}

func main() {
    p := point{1, 2}
    fmt.Printf("%v\n", p)
    fmt.Printf("%+v\n", p)
    fmt.Printf("%#v\n", p)
    fmt.Printf("%T\n", p)
    fmt.Printf("%t\n", true)
    fmt.Printf("%d\n", 123)
    fmt.Printf("%b\n", 14)
    fmt.Printf("%c\n", 33)
    fmt.Printf("%x\n", 456)
    fmt.Printf("%f\n", 78.9)
    fmt.Printf("%e\n", 123400000.0)
    fmt.Printf("%E\n", 123400000.0)

    fmt.Printf("%s\n", "\"string\"")
    fmt.Printf("%q\n", "\"string\"")
    fmt.Printf("%x\n", "hex this")
    fmt.Printf("%p\n", &p)

    fmt.Printf("|%6d|%6d|\n", 12, 345)
    fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45)
    fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45)
    fmt.Printf("|%6s|%6s|\n", "foo", "b")
    fmt.Printf("|%-6s|%-6s|\n", "foo", "b")
	
    s := fmt.Sprintf("a %s", "string")
    fmt.Println(s)

    fmt.Fprintf(os.Stderr, "an %s\n", "error")
}

/*
{1 2}
{x:1 y:2}
main.point{x:1, y:2}
main.point
true
123
1110
!
1c8
an error
78.900000
1.234000e+08
1.234000E+08
"string"
"\"string\""
6865782074686973
0xc000012090
|    12|   345|
|  1.20|  3.45|
|1.20  |3.45  |
|   foo|     b|
|foo   |b     |
a string
*/

 

13.字符串字面量

package main

import "fmt"

func main() {
	fmt.Println("peace be upon you \nupon you be peace")
	fmt.Println(`strings can span multiple lines with the \n escape sequence`)  // 原始字符串字面量
	fmt.Println(`                                                               
	             peace be upon you 
	             upon you be peace`)                                            // 制表符也会被正确打印
	fmt.Printf("%v is a %[1]T\n","literal string")
	fmt.Printf("%v is a %[1]T\n",`literal string`)   // 无论是字符串字面量还是原始字符串,最终都将变成字符串
}

/*
peace be upon you 
upon you be peace
strings can span multiple lines with the \n escape sequence
                                                               
	             peace be upon you 
	             upon you be peace
literal string is a string
literal string is a string
*/

 

14.字符处理

凯撒密码示例:

package main

import "fmt"

func main(){
	c := 'a'                // byte 类型用单引号,双引号默认是 string 类型
	c = c + 3
	fmt.Printf("%c\n",c)    // 打印出“d”
	c = c - 'a' + 'A'       // 小写字母转换为大写字母
	fmt.Printf("%c\n",c)    // 打印出“D”

	// 凯撒解密
	message := "uv vagreangvbany fcnpr fgngvba"
	for i := 0; i < len(message); i++{
		char1 := message[i]                  // len 获取字符串长度
		if char1 >= 'a' && char1 <= 'z'{     // 只转换小写字母
			char1 = char1 + 13               // 转换按一定规律进行
			if char1 > 'z'{                  // 如果是大写字母,转换成小写
				char1 = char1 -26
			}
		}
		fmt.Printf("%c ",char1)
	}	
}

/*
d
D
h i   i n t e r n a t i o n a l   s p a c e   s t a t i o n 
*/

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wonderBlock

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值