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

maj*_*rif 1 buffer go

我是Golang的新手,我正在尝试写入一个缓冲区,该缓冲区应该在开始写入之前填充到特定大小.

我的尝试:

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())
Run Code Online (Sandbox Code Playgroud)

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

One*_*One 6

您不需要重新分配切片bytes.Buffer,或者如果您需要,则需要设置上限而不是len:

buf := bytes.NewBuffer(make([]byte, 0, 52)) // or simply
buf := bytes.NewBuffer(nil)
Run Code Online (Sandbox Code Playgroud)

还有buf.Reset()但这是针对具体的例子是矫枉过正.

制作(切片,大小,帽子):

切片:大小指定长度.切片的容量等于其长度.可以提供第二整数参数以指定不同的容量; 它必须不小于长度,因此make([] int,0,10)分配长度为0且容量为10的切片.