Переменная binary.BigEndian
Переменная binary.BigEndian предоставляет
доступ к методам интерфейса ByteOrder для
работы с порядком байтов от старшего к младшему
(big-endian). Big-endian означает, что самый
значимый байт числа записывается первым. Эта
переменная часто используется при чтении и записи
бинарных данных, особенно при работе с сетевыми
протоколами, файловыми форматами и низкоуровневым
вводом-выводом.
Синтаксис
binary.BigEndian.Uint16(b []byte) uint16
binary.BigEndian.Uint32(b []byte) uint32
binary.BigEndian.Uint64(b []byte) uint64
binary.BigEndian.PutUint16(b []byte, v uint16)
binary.BigEndian.PutUint32(b []byte, v uint32)
binary.BigEndian.PutUint64(b []byte, v uint64)
Пример
Давайте прочитаем 16-битное целое число из среза байтов в порядке big-endian:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
data := []byte{0x12, 0x34}
res := binary.BigEndian.Uint16(data)
fmt.Println(res)
}
Результат выполнения кода:
4660
В данном примере байты 0x12 и 0x34
интерпретируются как число 0x1234, что в
десятичной системе равно 4660.
Пример
Давайте запишем 32-битное число в срез байтов в порядке big-endian:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
num := uint32(0x12345678)
buf := make([]byte, 4)
binary.BigEndian.PutUint32(buf, num)
fmt.Printf("%x", buf)
}
Результат выполнения кода:
"12345678"
В результате мы получили срез байтов, где
старший байт 0x12 идет первым, а младший
0x78 - последним.
Пример
Давайте сравним чтение 64-битного числа в big-endian и little-endian:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
data := []byte{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}
big := binary.BigEndian.Uint64(data)
little := binary.LittleEndian.Uint64(data)
fmt.Printf("Big-endian: %x\n", big)
fmt.Printf("Little-endian: %x\n", little)
}
Результат выполнения кода:
"Big-endian: 102030405060708"
"Little-endian: 807060504030201"
Как видно из примера, при чтении в big-endian порядок байтов сохраняется, а при чтении в little-endian байты интерпретируются в обратном порядке.
Смотрите также
-
переменную
binary.LittleEndian,
которая предоставляет функции для работы с порядком байтов от младшего к старшему -
переменную
binary.NativeEndian,
которая предоставляет функции для работы с порядком байтов текущей архитектуры -
функцию
binary.Read,
которая читает структурированные бинарные данные из ридера -
функцию
binary.Write,
которая записывает структурированные бинарные данные в ридер