如何在不创建bytes.Buffer
的情况下从[]byte
读取unit8
。该值已像这样写入缓冲区,
buf := new(bytes.Buffer)
binary.Write(buf, binary.BigEndian, uint32(1))
binary.Write(buf, binary.BigEndian, uint8(1))
b := buf.Bytes()
在解码时,可以轻松完成uint32
,如下所示...
len := binary.BigEndian.Uint32(b[:4])
但是对于uint8
,检索我可以想出的值的唯一方法是创建一个缓冲区,然后读取第一个字节,
buf := new(bytes.Buffer)
_, err := buf.Write(b[4:5])
// error handling ...
id = buf.ReadByte()
似乎encoding/binary
pkg 中没有用于uint8
值检索的方法。我想这背后可能有一些很好的理由。
问题:有没有其他方法可以在不创建Buffer
的情况下从该[]byte
中读取uint8
?
我们是一个索引表达式,用于从切片中获取单个uint8
。
len := binary.BigEndian.Uint32(b[:4])
id := b[4] // <-- index expression
请注意,byte
是 uint8
的别名。
这是我发现的一种优雅方式,
var len uint32
var id uint8
binary.Read(buf, binary.BigEndian, &len)
binary.Read(buf, binary.BigEndian, &id)
// this method doesn't need you to create a buffer for each value read