Einführung in den Erdbeer-PHP-Editor: Beim Programmieren müssen wir manchmal Bytedaten in die Felder der Struktur kopieren. Dieser Prozess kann durch Reflexion erreicht werden. Reflection ist ein leistungsstarkes Tool zum Überprüfen und Bearbeiten von Codestrukturen zur Laufzeit. Durch Reflexion können wir die Feldinformationen der Struktur erhalten und die Bytedaten entsprechend der Art und Reihenfolge der Felder in die Struktur kopieren, um die Datenkonvertierung und -zuweisung zu realisieren. Dieser Ansatz kann uns Komfort und Flexibilität bringen und es uns ermöglichen, Byte-Daten effizienter zu verarbeiten.
Wie iteriere ich Byte-Slices und ordne sie den Feldern einer Struktur zu?
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) }
Erwartungen:
Ich habe das schon einmal in C/C++ gemacht, weiß aber nicht, wie ich es in Go machen soll. Ich benötige eine generische Zuordnungsfunktion, da ich mehrere unterschiedliche Strukturen haben werde, von denen einige möglicherweise nicht im Stream vorhanden sind.
Idealerweise würde ich gerne die initialisierte Struktur übergeben und mein Code wird ihre Strukturfelder iterativ füllen.
Nutzen Sie den Reflexionscode im Binär-/Kodierungspaket.
Schritt 1: Deklarieren Sie das Feld als Array statt als Slice.
type s struct { f1 [4]byte f2 [2]byte f3 [2]byte }
Schritt 2: Verwenden Sie binary.read, um die Daten in eine Struktur zu dekodieren 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) }
Schritt 3: Fertig!
fmt.Print(s) // prints {[83 117 110 83] [0 1] [0 65]}
https://www.php.cn/link/42ae1544956fbe6e09242e6cd752444c
Das obige ist der detaillierte Inhalt vonKopieren Sie Bytes mithilfe von Reflektion in Strukturfelder. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!