Как преобразовать фрагмент байта, полученный по сети, в структуру

#networking #struct #go

#сеть #структура #Вперед

Вопрос:

Существует ли библиотечная функция для преобразования байта [] в структуру? Я работаю над клиентом, чтобы перехватить структуру, отправленную с сервера, написанного на C.

У меня есть настройка структуры следующим образом.

 type mystruct struct {
    A   uint32
    B   uint16
}
  

Вот как я считываю байты по проводам.

 var s []byte = make([]byte, 6)
sock.ReadFromUDP(s)
fmt.Println(s)
  

Ответ №1:

Вы могли бы использовать кодировку / двоичный файл. Из примера документации:http://golang.org/pkg/encoding/binary

 package main

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

func main() {
    var pi float64
    b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}
    buf := bytes.NewReader(b)
    err := binary.Read(buf, binary.LittleEndian, amp;pi)
    if err != nil {
        fmt.Println("binary.Read failed:", err)
    }
    fmt.Print(pi)
}
  

Ответ №2:

В частности, со структурами это было бы что-то вроде этого.

 type mystruct struct {
    A   uint32
    B   uint16
}

// ... networking code...

var buff []byte = make([]byte, 6)
sock.ReadFromUDP(buff)

var reader = bytes.NewReader(buff)   
var str mystruct
binary.Read(reader, binary.LittleEndian, amp;str)

// now str has things
fmt.Println(str.A)