使用反射將位元組複製到結構體字段中
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) }
登入後複製
期望:
- f1 = [83,117,110,83]
- f2 = [0,1]
- f3 = [0,65]
我以前在 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中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前
By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保護它?
3 週前
By DDD

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)