Функция binary.Write

Функция binary.Write записывает двоичное представление переданных данных в поток io.Writer. В первый параметр функция принимает поток для записи, во второй - порядок байтов (binary.ByteOrder), в третий - данные для записи. Функция возвращает ошибку, если запись не удалась.

Синтаксис

gobinary.Write(w io.Writer, order binary.ByteOrder, data any) error

Пример

Давайте запишем целое число в буфер и получим его двоичное представление:

gopackage main

import (
  "bytes"
  "encoding/binary"
  "fmt"
)

func main() {
  buf := new(bytes.Buffer)
  num := int32(42)

  err := binary.Write(buf, binary.LittleEndian, num)
  if err != nil {
    fmt.Println("error:", err)
    return
  }

  fmt.Println(buf.Bytes())
}

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

go[42 0 0 0]

Пример

Давайте запишем структуру с несколькими полями разных типов:

gopackage main

import (
  "bytes"
  "encoding/binary"
  "fmt"
)

func main() {
  buf := new(bytes.Buffer)

  type Data struct {
    ID   int16
    Age  int32
    Flag bool
  }

  data := Data{
    ID:   1024,
    Age:  30,
    Flag: true,
  }

  err := binary.Write(buf, binary.BigEndian, data)
  if err != nil {
    fmt.Println("error:", err)
    return
  }

  fmt.Println(buf.Bytes())
}

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

go[4 0 0 0 0 30 1]

Пример

Давайте запишем несколько значений подряд в один буфер:

gopackage main

import (
  "bytes"
  "encoding/binary"
  "fmt"
)

func main() {
  buf := new(bytes.Buffer)

  num1 := uint16(256)
  num2 := int64(-1000)
  num3 := float32(3.14)

  err := binary.Write(buf, binary.LittleEndian, num1)
  if err != nil {
    fmt.Println("error:", err)
    return
  }

  err = binary.Write(buf, binary.LittleEndian, num2)
  if err != nil {
    fmt.Println("error:", err)
    return
  }

  err = binary.Write(buf, binary.LittleEndian, num3)
  if err != nil {
    fmt.Println("error:", err)
    return
  }

  fmt.Println(buf.Bytes())
}

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

go[0 1 24 252 255 255 255 255 255 255 195 245 72 64]

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

  • функцию binary.Read,
    которая читает двоичные данные из потока
  • функцию binary.Size,
    которая возвращает размер данных при двоичной кодировке
  • константу binary.BigEndian,
    которая представляет порядок байтов от старшего к младшему
  • константу binary.LittleEndian,
    которая представляет порядок байтов от младшего к старшему