gpt4 book ai didi

go - 使用偏移量写入 Golang 中固定大小的缓冲区

转载 作者:IT王子 更新时间:2023-10-29 01:51:25 29 4
gpt4 key购买 nike

我是 Golang 的新手,我正在尝试写入一个 Buffer,该 Buffer 在开始写入之前应该填充为 0 到特定大小。

我的尝试:

buf := bytes.NewBuffer(make([]byte, 52))

var pktInfo uint16 = 243
var pktSize uint16 = 52
var pktLine uint16 = binary.LittleEndian.Uint16(data)
var pktId uint16 = binary.LittleEndian.Uint16(data[6:])

// header
binary.Write(buf, binary.LittleEndian, pktInfo)
binary.Write(buf, binary.LittleEndian, pktSize)
binary.Write(buf, binary.LittleEndian, pktLine)

// body
binary.Write(buf, binary.LittleEndian, pktId)
(...a lot more)

fmt.Printf("%x\n", data)
fmt.Printf("%x\n", buf.Bytes())

问题是它在字节之后写入而不是从头开始写入。我该怎么做?

最佳答案

您不需要为 bytes.Buffer 重新分配 slice ,或者如果您这样做,您需要设置上限而不是 len:

buf := bytes.NewBuffer(make([]byte, 0, 52)) // or simply
buf := bytes.NewBuffer(nil)

还有 buf.Reset(),但对于那个特定的例子来说,这有点过分了。

make(slice, size, cap) :

Slice: The size specifies the length. The capacity of the slice is equal to its length. A second integer argument may be provided to specify a different capacity; it must be no smaller than the length, so make([]int, 0, 10) allocates a slice of length 0 and capacity 10.

关于go - 使用偏移量写入 Golang 中固定大小的缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28639859/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com