2014-07-04 41 views
1

是否有庫函數將[]字節轉換爲結構?我正在研究一個客戶端來捕獲從C編寫的服務器發送的結構。如何通過網絡接收字節切片到結構

我有我的像這樣的結構設置。

type mystruct struct { 
    A uint32 
    B uint16 
} 

這是我如何讀取電線上的字節。

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

回答

3

您可以使用encoding/binary。 從文檔的例子: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, &pi) 
    if err != nil { 
     fmt.Println("binary.Read failed:", err) 
    } 
    fmt.Print(pi) 
} 
0

具體與結構,這將是這樣的。

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, &str) 

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