Метод binary.ByteOrder.Uint64
Метод binary.ByteOrder.Uint64 преобразует срез из 8 байтов в 64-битное целое число без знака. В качестве первого параметра метод принимает срез байтов длиной не менее 8 элементов. Метод возвращает значение типа uint64. Порядок байтов определяется конкретной реализацией интерфейса binary.ByteOrder, например, binary.BigEndian или binary.LittleEndian.
Синтаксис
order.Uint64(b)
Пример
Давайте прочитаем 64-битное число из байтового среза с использованием порядка байтов BigEndian:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
b := []byte{0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0}
res := binary.BigEndian.Uint64(b)
fmt.Println(res)
}
Результат выполнения кода:
0x123456789ABCDEF0
Пример
Теперь прочитаем то же самое число с использованием порядка байтов LittleEndian:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
b := []byte{0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0}
res := binary.LittleEndian.Uint64(b)
fmt.Println(res)
}
Результат выполнения кода:
0xF0DEBC9A78563412
Пример
Метод можно использовать для чтения данных из сетевых пакетов, где порядок байтов обычно BigEndian:
package main
import (
"encoding/binary"
"fmt"
)
func main() {
// Пример данных из сетевого пакета
packet := []byte{
0x00, 0x00, 0x00, 0x0A, // длина пакета
0x01, 0x02, 0x03, 0x04, // идентификатор
}
length := binary.BigEndian.Uint32(packet[0:4])
id := binary.BigEndian.Uint32(packet[4:8])
fmt.Printf("length: %d, id: %d\n", length, id)
}
Результат выполнения кода:
"length: 10, id: 16909060"
Смотрите также
-
метод
binary.ByteOrder.Uint16,
который читает 16-битное число из байтового среза -
метод
binary.ByteOrder.Uint32,
который читает 32-битное число из байтового среза -
метод
binary.ByteOrder.PutUint64,
который записывает 64-битное число в байтовый срез -
функцию
binary.Read,
которая читает структурированные данные из io.Reader