Метод binary.ByteOrder.PutUint64

Метод binary.ByteOrder.PutUint64 записывает 64-битное беззнаковое целое число в байтовый срез длиной не менее 8 байт. Первым параметром метод принимает байтовый срез ([]byte), в который будет произведена запись, вторым параметром - 64-битное число (uint64), которое нужно записать. Важно, чтобы срез имел достаточную длину, иначе метод вызовет панику.

Синтаксис

gobyteOrder.PutUint64(b []byte, v uint64)

Пример с BigEndian

Давайте запишем число 1234567890 в байтовый срез с использованием порядка байтов binary.BigEndian:

gopackage main

import (
  "encoding/binary"
  "fmt"
)

func main() {
  b := make([]byte, 8)
  binary.BigEndian.PutUint64(b, 1234567890)
  fmt.Printf("%x\n", b)
}

Результат выполнения кода:

go"00000000499602d2"

Пример с LittleEndian

Теперь запишем то же самое число с использованием порядка байтов binary.LittleEndian:

gopackage main

import (
  "encoding/binary"
  "fmt"
)

func main() {
  b := make([]byte, 8)
  binary.LittleEndian.PutUint64(b, 1234567890)
  fmt.Printf("%x\n", b)
}

Результат выполнения кода:

go"d202964900000000"

Пример с предварительно заполненным срезом

Метод не очищает срез перед записью, он просто перезаписывает первые 8 байт. Давайте проверим это:

gopackage main

import (
  "encoding/binary"
  "fmt"
)

func main() {
  b := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
  binary.BigEndian.PutUint64(b, 0x0102030405060708)
  fmt.Printf("%x\n", b)
}

Результат выполнения кода:

go"0102030405060708090a"

Смотрите также

  • метод binary.ByteOrder.Uint64,
    который читает 64-битное число из байтового среза
  • метод binary.ByteOrder.PutUint32,
    который записывает 32-битное число в байтовый срез
  • метод binary.ByteOrder.PutUint16,
    который записывает 16-битное число в байтовый срез
  • функцию binary.Write,
    которая записывает структуру в бинарном представлении