1、字符串和数组的转换
字符串和数组是数据处理中常用的格式类型,他们之间的数据转换方式需要非常熟悉
本文中的数组严格来说应该是切片,切片是go中一个非常重要的概念,不熟悉的请自行百度
-
1.1、字符串转换成数组,获取字符串的ASCLL编码
string类型和byte类型转换方式为:
参考下面的示例:
package main
import (
"fmt"
)
func main() {
key :="1234567890"
var data = []byte(key)
i := 0
fmt.Println("key = ",key)
for ; i < len(key) ; i++ {
fmt.Printf("key[%d]=%x ", i,key[i])
}
fmt.Println()
fmt.Println("key = ",key)
for i = 0; i < len(key) ; i++ {
fmt.Printf("data[%d]=%x ",i, data[i])
}
fmt.Println()
fmt.Println("end")
}
结果:字符12变成字节0x31,0x32
key = 1234567890
key[0]=31 key[1]=32 key[2]=33 key[3]=34 key[4]=35 key[5]=36 key[6]=37 key[7]=38 key[8]=39 key[9]=30
key = 1234567890
data[0]=31 data[1]=32 data[2]=33 data[3]=34 data[4]=35 data[5]=36 data[6]=37 data[7]=38 data[8]=39 data[9]=30
end
总结:
字符串key直接取数组下标是可以正常执行的,因此go中不需要像java一样使用.getByte()取字节数据
当然,go中也可以使用
var byte_data = []byte(string_data)
将string数据转换成byte类型
-
1.2、字符串转换成数组,将两个字符拼接成一个字节
前提: 字符数据的范围为0~F
参考下面的示例:
package main
import (
"encoding/hex"
"fmt"
)
func main() {
key :="12345678"
//arr := bytes.NewBufferString(key)
arr,_ := hex.DecodeString(key)
fmt.Println("arr",arr)
i := 0
for i = 0; i < len(arr) ; i++ {
fmt.Printf("arr[%d]=%x " ,i, arr[i] )
}
}
结果:字符12变成了字节0x12
arr[0]=12 arr[1]=34 arr[2]=56 arr[3]=78
-
1.3、数组转换成字符串,字节的十六进制字节变成字符
参考下面的示例:
package main
import (
"encoding/hex"
"fmt"
)
func main() {
i := 0
//数组
arr := [...]byte{0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38}
//切片
slice := []byte{0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38}
//数组用字符形式打印,即可变成字符串输出
for ; i < len(arr) ; i++ {
fmt.Printf("%c",arr[i])
}
fmt.Println()
fmt.Println("arr:",arr)
fmt.Println("src:",slice)
arr_str := hex.EncodeToString(slice)
fmt.Println("arr_str = ",arr_str)
}
结果:字节0x31变成了字符31
1234567812345678
arr: [49 50 51 52 53 54 55 56 49 50 51 52 53 54 55 56]
slice: [49 50 51 52 53 54 55 56 49 50 51 52 53 54 55 56]
arr_str = 31323334353637383132333435363738
注意:示例中的hex.EncodeToString中的输入参数为切片,而不是数组
-
1.4、数组转换成字符串,两个字节拼接成一个字符
前提:字节数组为字符0~F所对应的ASCLC码表示
示例如下:
package main
import (
"fmt"
)
func main() {
//切片
slice := []byte{0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38}
//
fmt.Println(string(slice))
}
结果: 0x31,转换成了字符串1,0x32转换成字符串2
1234567812345678
2、string和int类型的转化
string转成int:
int, err := strconv.Atoi(string)
string转成int64:
int64, err := strconv.ParseInt(string, 10, 64)
int转成string:
string := strconv.Itoa(int)
int64转成string:
string := strconv.FormatInt(int64,10)
3、指针类型的转换
(学习和更新中……)