如何将字节数组附加到Go中的字节片[重复]
Posted
技术标签:
【中文标题】如何将字节数组附加到Go中的字节片[重复]【英文标题】:How to append byte array to slice of bytes in Go [duplicate] 【发布时间】:2018-05-03 08:39:01 【问题描述】:我有一段简单的代码想要理解,但我正在努力弄清楚如何让它正常工作。
一般的想法是我想传递一些数据,并将其转换为字节数组。然后我想在我的字节切片的第一个索引处应用字节数组的长度,然后将字节数组添加到切片的末尾。
这是它尝试过的:
var slice []byte
myString := "Hello there"
stringAsByteArray := []byte(myString) //convert my string to byte array
slice[0] = byte(len(stringAsByteArray)) //length of string as byte array
append(slice, stringAsByteArray)
所以想法是slice
的第一个字节包含len(b)
的数量,然后是实际的字符串消息作为一系列字节。
但我明白了:
cannot use stringAsByteArray (type []byte) as type byte in append
append(slice, stringAsByteArray) evaluated but not used
【问题讨论】:
编译器打印的错误消息到底是什么不清楚:字符串和 []bytes 是不同的类型,您不能在追加中混合类型。第二个更为根本。所有这些在围棋巡回赛中的解释比这里解释的要好得多。 我认为它附加了一个字节数组,因为我确实将它转换为一个字节数组..并且看到我的切片是字节而不是字符串。我不完全理解为什么它不能将一个字节数组附加到一个字节片上。 "我不完全理解为什么它不能将字节数组附加到字节片"。仅仅因为append
的工作方式通常是这样的append([]T, T)
:您不会将切片附加到切片上,而是将一个或多个元素附加到切片上。如果您想附加切片的每个元素,请使用 ...
,tour.golang.org/moretypes/15 和引用的 blog.golang.org/go-slices-usage-and-internals 对此进行了很好的解释。
您的示例中没有数组,只有切片。请阅读this。
【参考方案1】:
例如,
package main
import "fmt"
func main()
myString := "Hello there"
slice := make([]byte, 1, 1+len(myString))
slice[0] = byte(len(myString))
slice = append(slice, myString...)
fmt.Println(slice[0], string(slice[1:]))
输出:
11 Hello there
【讨论】:
啊,那么我尝试将字节数组附加到字节片是不合逻辑的吗?我认为 append 只会将两者连接在一起。 @Sir:查看我修改后的答案。【参考方案2】:-
首先你需要用
make
函数初始化切片
要向切片添加数据,您应该使用append
函数
要将元素从[]byte
添加到[]byte
,您可以在append
调用中使用扩展运算符。
最后你需要使用调用append
函数的结果
https://play.golang.org/p/CP18akKsCa
【讨论】:
这不是将字符串的长度添加到切片的末尾而不是开头吗?我试图在一开始就得到它:) 你是myString := "Hello there"; slice := make([]byte, 0, len(myString)+1)
吗?这将创建 length 0 和 capacity len(string) + 1 的切片。这是为切片分配所有内存的小优化,您需要从字符串 + 具有字符串长度的第一个字节创建字节数组。以上是关于如何将字节数组附加到Go中的字节片[重复]的主要内容,如果未能解决你的问题,请参考以下文章