Heim > Backend-Entwicklung > Golang > Kopieren Sie Bytes mithilfe von Reflektion in Strukturfelder

Kopieren Sie Bytes mithilfe von Reflektion in Strukturfelder

WBOY
Freigeben: 2024-02-09 09:00:35
nach vorne
563 Leute haben es durchsucht

Kopieren Sie Bytes mithilfe von Reflektion in Strukturfelder

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.

Frageninhalt

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)
  }
Nach dem Login kopieren

Erwartungen:

  • f1 = [83,117,110,83]
  • f2 = [0,1]
  • f3 = [0,65]

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.

Problemumgehung

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
}
Nach dem Login kopieren

Schritt 2: Verwenden Sie binary.read, um die Daten in eine Struktur zu dekodieren

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)
}
Nach dem Login kopieren

Schritt 3: Fertig!

fmt.Print(s) // prints {[83 117 110 83] [0 1] [0 65]}
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage