Heim > Artikel > Backend-Entwicklung > Hier sind einige fragebasierte Titel, die zum Inhalt Ihres Artikels passen. Beachten Sie dabei das „How to“-Format: * Wie konvertiert man in Go zwischen Strukturen und Byte-Arrays? * Gehen Sie von der Struktur zum Byte-Array
Konvertieren zwischen Strukturen und Byte-Arrays in Go
In Go kann es vorkommen, dass Sie zwischen Strukturen und Byte-Arrays konvertieren müssen. oder führen Sie C-ähnliche Vorgänge wie Typumwandlung und Speicherkopie durch. In diesem Artikel werden Lösungen für diese Aufgaben untersucht.
Typumwandlung
Go unterstützt keine C-ähnliche Typumwandlung, aber Sie können den Typ „unsafe.Pointer“ verwenden, um ähnliches durchzuführen Operationen. Um eine Struktur in ein Byte-Array umzuwandeln, verwenden Sie die Funktion unsafe.Pointer(), um die Adresse der Struktur in einen Zeiger umzuwandeln:
<code class="go">type packet struct { opcode uint16 data [1024]byte } var pkt1 packet // Convert pkt1 to a byte array byteArray := (*[unsafe.Sizeof(pkt1)]byte)(unsafe.Pointer(&pkt1))</code>
Um ein Byte-Array zurück in eine Struktur zu konvertieren, verwenden Sie den unsafe.Pointer ()-Funktion erneut, um den Byte-Array-Zeiger auf den gewünschten Strukturtyp umzuwandeln:
<code class="go">// Convert byteArray back to a packet struct pkt2 := *(**packet)(unsafe.Pointer(&byteArray))</code>
Speicherkopie
Während Go kein direktes Äquivalent von memcpy hat ()-Funktion können Sie mit der Funktion copy() Speicherkopien durchführen. Um die Daten von einem Byte-Array in eine Struktur zu kopieren, können Sie die folgende Syntax verwenden:
<code class="go">type file_info struct { file_size uint32 // 4 bytes file_name [1020]byte } var file file_info copy(unsafe.Pointer(&file), pkt1.data) // Copy data from pkt1.data to file</code>
Verwenden des Encoding/Binary-Pakets
Als Alternative zu Mit unsafe.Pointer können Sie das Paket „encoding/binary“ verwenden, um Typkonvertierungen zwischen Strukturen und Byte-Arrays durchzuführen. Dieses Paket bietet Funktionen zum Kodieren und Dekodieren von Daten in Binärformaten und erleichtert so den Umgang mit Endianness und Datengrößen:
<code class="go">// Convert a struct to a byte array t := T{A: 0xEEFFEEFF, B: 3.14} var buf bytes.Buffer binary.Write(&buf, binary.BigEndian, t) // Encode struct t to buf // Convert a byte array to a struct t2 := T{} binary.Read(&buf, binary.BigEndian, &t2) // Decode byte array buf into struct t2</code>
Das obige ist der detaillierte Inhalt vonHier sind einige fragebasierte Titel, die zum Inhalt Ihres Artikels passen. Beachten Sie dabei das „How to“-Format: * Wie konvertiert man in Go zwischen Strukturen und Byte-Arrays? * Gehen Sie von der Struktur zum Byte-Array. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!