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

Kopieren Sie Bytes mithilfe von Reflektion in Strukturfelder

WBOY
WBOYnach vorne
2024-02-09 09:00:35535Durchsuche

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)
  }

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
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen