РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1195 of 1593 menu

Функция binary.Read

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

Синтаксис

binary.Read(r io.Reader, order binary.ByteOrder, data any) error

Пример

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

package main import ( "bytes" "encoding/binary" "fmt" ) func main() { type Data struct { ID uint32 Value float64 } buf := new(bytes.Buffer) binary.Write(buf, binary.LittleEndian, uint32(42)) binary.Write(buf, binary.LittleEndian, float64(3.14)) var res Data err := binary.Read(buf, binary.LittleEndian, &res) if err != nil { fmt.Println("Error:", err) return } fmt.Printf("ID: %d, Value: %.2f\n", res.ID, res.Value) }

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

"ID: 42, Value: 3.14"

Пример

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

package main import ( "bytes" "encoding/binary" "fmt" ) func main() { type Person struct { Age uint16 Height float32 Active bool } buf := new(bytes.Buffer) binary.Write(buf, binary.BigEndian, uint16(30)) binary.Write(buf, binary.BigEndian, float32(175.5)) binary.Write(buf, binary.BigEndian, bool(true)) var res Person err := binary.Read(buf, binary.BigEndian, &res) if err != nil { fmt.Println("Error:", err) return } fmt.Printf("Age: %d, Height: %.1f, Active: %t\n", res.Age, res.Height, res.Active) }

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

"Age: 30, Height: 175.5, Active: true"

Пример

Давайте прочитаем бинарные данные из файла:

package main import ( "encoding/binary" "fmt" "os" ) func main() { type Config struct { Version uint32 Port uint16 Enabled bool Backup float32 } file, err := os.Open("config.bin") if err != nil { fmt.Println("Error opening file:", err) return } defer file.Close() var res Config err = binary.Read(file, binary.LittleEndian, &res) if err != nil { fmt.Println("Error reading:", err) return } fmt.Printf("Config: %+v\n", res) }

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

"Config: {Version:1 Port:8080 Enabled:true Backup:3.14}"

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

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