#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)