如何将字节数组附加到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 0capacity len(string) + 1 的切片。这是为切片分配所有内存的小优化,您需要从字符串 + 具有字符串长度的第一个字节创建字节数组。

以上是关于如何将字节数组附加到Go中的字节片[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在Go中将字节数组转换为字符串[重复]

使用 VB.Net 将两个字节数组附加到一个字节数组

如何在golang中将切片附加到字节数组

如何将字节数组中的图像发送到从android到具有Flask的python的url [重复]

如何在c ++中将int数组转换为字节数组[重复]

字节数组到十六进制字符数组的转换[重复]