Go语言string和[]byte互相转换

3,277 阅读1分钟

Go语言string和[]byte互相转换

Go语言中有两种可以储存一串字符的类型,分别是字符串string和byte类型数组[]byte,但是他们直接并不能直接使用等于号赋值,也不能单纯的转换,而是要通过切片来进行转换。

string转换成[]byte

可以直接使用[]byte(str)强制转换。

package main

import "fmt"

func main() {
	var str string = "test"
	var data []byte = []byte(str)
    fmt.Println("string: ", str)	// string: test
    fmt.Println("[]byte: ", data)	// []byte: [116 101 115 116]
}

可以看到[]byte输出的结果正是string的各个字符对应的ASCII码。

[]byte转换成string

要将byte数组转换成string不能直接转换,而需要将[]byte的切片转换。即使用string(数组名[:])进行转换。

package main

import "fmt"

func main() {
	var data [5]byte
	data[0] = 'T'
	data[1] = 'E'
	data[2] = 'S'
	data[3] = 'T'
	var str string = string(data[:])
	fmt.Println("[]byte: ", data)	// []byte: [84 69 83 84 0]
	fmt.Println("string: ", str)	// string: TEST
}

实践环节

将[][]byte类型的二维数组board初始化为[["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]]

board := [][]byte{[]byte("ABCE"),[]byte("SFCS"),[]byte("ADEE")}

由于Go语言需要所有变量(包括中间结果)都有确定的值,所以在声明过程中,需要先将(board[0])[],(board[1])[],(board[2])[]都赋予确定的值才能生成board,所以需要在定义内部就进行转换。