php小編草莓介紹:在程式設計中,有時候我們需要將位元組資料複製到結構體的欄位中。這個過程可以透過使用反射來實現。反射是一種強大的工具,可以在運行時檢查和操作程式碼結構。透過反射,我們可以獲取結構體的字段信息,並將位元組數據按照字段的類型和順序複製到結構體中,實現數據的轉換和賦值。這種方法可以為我們帶來便利性和靈活性,使得我們能夠更有效率地處理位元組資料。
如何迭代位元組切片並將它們指派給結構體的欄位?
type s struct { f1 []byte f2 []byte f3 []byte } func S s { x := s{} x.f1 = make([]byte, 4) x.f1 = make([]byte, 2) x.f1 = make([]byte, 2) return x } func main() { data := []byte{83, 117, 110, 83, 0, 1, 0, 65} Z := S() //pesudo code from here i:= 0 for field in Z { field = data[i:len(field)] i += len(field) }
期望:
我以前在 c/c 中做過這個,但我不知道如何在 go 中做到這一點。我需要通用的分配函數,因為我將有幾個不同的結構,其中一些結構可能不存在於流中。
理想情況下,我想傳遞初始化的結構,並且我的程式碼將迭代填充它們的結構欄位。
利用二進位/編碼包中的反射程式碼。
第 1 步:將欄位宣告為陣列而不是切片。
type s struct { f1 [4]byte f2 [2]byte f3 [2]byte }
第 2 步:使用 binary.read 將資料解碼為結構體 p>
var s s data := []byte{83, 117, 110, 83, 0, 1, 0, 65} err := binary.read(bytes.newreader(data), binary.littleendian, &s) if err != nil { log.fatal(err) }
第三步:完成!
fmt.Print(s) // prints {[83 117 110 83] [0 1] [0 65]}
https://www.php.cn/link/42ae1544956fbe6e09242e6cd752444c
以上是使用反射將位元組複製到結構體字段中的詳細內容。更多資訊請關注PHP中文網其他相關文章!