Метод binary.ByteOrder.Uint16
Метод binary.ByteOrder.Uint16 преобразует два байта из среза
в 16-битное целое число без знака. В первый параметр метод принимает
срез байтов []byte, из которого необходимо прочитать число.
Метод возвращает значение типа uint16. Важно, чтобы в срезе
было как минимум два байта, иначе метод вызовет панику.
Порядок байтов определяется тем, какой экземпляр ByteOrder
используется: binary.BigEndian для сетевого порядка
(старший байт в начале) или binary.LittleEndian
для порядка от младшего к старшему.
Синтаксис
var order binary.ByteOrder
value := order.Uint16(b []byte) uint16
Пример
Давайте прочитаем число из байтового среза с использованием
порядка байтов BigEndian:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
data := []byte{0x12, 0x34}
res := binary.BigEndian.Uint16(data)
fmt.Println(res)
}
Результат выполнения кода:
4660
Пример
Теперь прочитаем те же байты с порядком LittleEndian.
Результат будет другим, так как байты интерпретируются
в обратном порядке:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
data := []byte{0x12, 0x34}
res := binary.LittleEndian.Uint16(data)
fmt.Println(res)
}
Результат выполнения кода:
13330
Пример
Метод Uint16 можно применять к любому срезу байтов,
например, к части более крупного буфера. В этом примере мы
читаем 16-битное число, начиная с индекса 2:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
buf := []byte{0x01, 0x02, 0xAA, 0xBB, 0x03, 0x04}
res := binary.BigEndian.Uint16(buf[2:4])
fmt.Printf("%#x\n", res)
}
Результат выполнения кода:
0xaabb
Смотрите также
-
метод
binary.ByteOrder.Uint32,
который читает 32-битное число из байтового среза -
метод
binary.ByteOrder.Uint64,
который читает 64-битное число из байтового среза -
метод
binary.ByteOrder.PutUint16,
который записывает 16-битное число в байтовый срез -
функцию
binary.Read,
которая читает структурированные данные из читателя