Чтение uint8 из байта [] без создания байта. Буфер - PullRequest
0 голосов
/ 19 июня 2019

Как прочитать unit8 из []byte без создания bytes.Buffer.Значение было записано в буфер следующим образом:

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()

Кажется, что в * 1015 нет метода* pkg для uint8 поиска значения.И я думаю, что, вероятно, есть какая-то веская причина для этого.

Вопрос: Есть ли другой способ прочитать uint8 из этого []byte без создания Buffer ??

Ответы [ 2 ]

4 голосов
/ 19 июня 2019

Нас индексное выражение для получения одного uint8 из среза.

len := binary.BigEndian.Uint32(b[:4])
id := b[4]  // <-- index expression

Обратите внимание, что byte является псевдонимом для uint8.

0 голосов
/ 19 июня 2019

Вот элегантный способ, который я нашел,

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
...