我是 Golang 新手,我正在尝试写入一个缓冲区,在开始写入之前,该缓冲区应该被 0 填充到特定大小。
My try:
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
,或者如果这样做,您需要设置上限而不是长度:
buf := bytes.NewBuffer(make([]byte, 0, 52)) // or simply
buf := bytes.NewBuffer(nil)
还有buf.Reset()
但这对于这个特定的例子来说有点过分了。
制作(切片、大小、盖子) http://golang.org/pkg/builtin/#make:
切片:大小指定长度。切片的容量为
等于它的长度。可以提供第二个整数参数
指定不同的容量;它必须不小于
长度,因此 make([]int, 0, 10) 分配一个长度为 0 的切片,并且
容量 10.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)