什么是字节数组?
在Go语言中,字节数组(byte)是由一系列整数构成的数组。每个整数对应一个字符,这个字符由该整数在ASCII码表中对应的字符表示。因此,字节数组可以看作是由字符编码构成的数组,它可以被用于各种字符串处理场景。
string 转 byte 的方法
Go语言提供了两种将字符串转换为字节数组的方法:一种是通过类型转换实现,另一种是通过标准库中的函数实现。
(1)类型转换法
在Go语言中,string是一种不可变类型,它由一串字符构成。而byte则是一种可变类型,它由一系列整数构成。因此,我们可以通过类型转换将string类型转换为byte类型,即:
str := "hello world"
bytes := []byte(str)
str[]byte(str)bytes
(2)函数转换法
[]bytestring
str := "hello world"
bytes := []byte(str)
str2 := string(bytes)
strbytesstring(bytes)str2
字符串和字节数组的转换应用
将字符串转换为字节数组是Go语言中一项基础的操作,它不仅可以用于字符串和字节数组的相互转换,还可以用于各种字符串处理场景。下面我们来看几个常见的应用场景:
(1)字节数组拆分
字节数组可以被视作由一些整数构成的序列。因此,我们可以通过遍历字节数组,将其拆分成多个小数组:
str := "hello"
bytes := []byte(str)
chunks := [][]byte{}
chunkSize := 2
for i := 0; i < len(bytes); i += chunkSize {
end := i + chunkSize
if end > len(bytes) {
end = len(bytes)
}
chunk := bytes[i:end]
chunks = append(chunks, chunk)
}
fmt.Println(chunks)
strbytesbyteschunks
(2)压缩字符串
aaabcc[]byte{3, 97, 1, 98, 2, 99}312
str := "aaabcc"
outBytes := []byte{}
currentChar := str[0]
currentCount := 1
for i := 1; i < len(str); i++ {
if str[i] == currentChar {
currentCount += 1
} else {
outBytes = append(outBytes, byte(currentCount), byte(currentChar))
currentChar = str[i]
currentCount = 1
}
}
outBytes = append(outBytes, byte(currentCount), byte(currentChar))
fmt.Println(outBytes)
stroutBytesstroutBytes