Ho un'istanza di una struttura che ho definito e vorrei convertirla in una matrice di byte. Ho provato [] byte (my_struct), ma non ha funzionato. Inoltre, sono stato indirizzato allo binary package, ma non sono sicuro di quale funzione dovrei usare e come dovrei usarlo. Un esempio sarebbe molto apprezzato.In Go, come posso convertire una struttura in un array di byte?
risposta
Presumo che tu voglia qualcosa come il modo in cui C gestisce questo. Non esiste un modo per farlo. Dovrai definire la tua serializzazione e deserializzazione da e verso byte per la tua struttura. Il pacchetto binario ti aiuterà a codificare i campi della tua struct in byte, che puoi aggiungere all'array di byte, nella tua struct, ma sarai responsabile della specifica delle lunghezze e degli offset nell'array di byte che terranno i campi dalla tua struct.
Le altre opzioni sono per utilizzare uno dei pacchetti di codifica: come Gob o JSON.
EDIT:
Dal momento che si desidera che questo per fare un hash come dici nel tuo commento la cosa easisest da fare è utilizzare []byte(fmt.Sprintf("%v", struct))
in questo modo: http://play.golang.org/p/yY8mSdZ_kf
Avete preso in considerazione la serializzazione a BSON? http://labix.org/gobson
Si dovrebbe usare un buffer byte anziché una stringa, gli altri metodi suggeriti creano uno SHA1 di lunghezza variabile, la lunghezza standard SHA1 deve essere di 20 byte (160 bit)
package main
import (
"crypto/sha1"
"fmt"
"encoding/binary"
"bytes"
)
type myStruct struct {
ID string
Data string
}
func main() {
var bin_buf bytes.Buffer
x := myStruct{"1", "Hello"}
binary.Write(&bin_buf, binary.BigEndian, x)
fmt.Printf("% x", sha1.Sum(bin_buf.Bytes()))
}
Prova tu: http://play.golang.org/p/8YuM6VIlLV
È un metodo davvero semplice e funziona benissimo.
Le risposte di solo collegamento sono obsolete. –
Grazie Der, modifico questo. È stato il mio primo commento –
Non sembra che funzioni perché 'myStruct' non ha dimensioni fisse. https: //play.golang.org/p/IGA_lgRVNX –
Una possibile soluzione è il pacchetto standard "encoding/gob"
. Il pacchetto gob crea un codificatore/decodificatore che può codificare qualsiasi struttura in una matrice di byte e quindi decodificare quella matrice in una struttura. C'è un ottimo post, here.
Come altri hanno sottolineato, è necessario utilizzare un pacchetto come questo perché le strutture, per loro natura, hanno dimensioni sconosciute e non possono essere convertite in matrici di byte.
Ho incluso del codice e un play.
package main
import (
"bytes"
"encoding/gob"
"fmt"
"log"
)
type P struct {
X, Y, Z int
Name string
}
type Q struct {
X, Y *int32
Name string
}
func main() {
// Initialize the encoder and decoder. Normally enc and dec would be
// bound to network connections and the encoder and decoder would
// run in different processes.
var network bytes.Buffer // Stand-in for a network connection
enc := gob.NewEncoder(&network) // Will write to network.
dec := gob.NewDecoder(&network) // Will read from network.
// Encode (send) the value.
err := enc.Encode(P{3, 4, 5, "Pythagoras"})
if err != nil {
log.Fatal("encode error:", err)
}
// HERE ARE YOUR BYTES!!!!
fmt.Println(network.Bytes())
// Decode (receive) the value.
var q Q
err = dec.Decode(&q)
if err != nil {
log.Fatal("decode error:", err)
}
fmt.Printf("%q: {%d,%d}\n", q.Name, *q.X, *q.Y)
}
- 1. Come posso convertire un int64 in un array di byte in go?
- 2. Go: come convertire struct in [] byte?
- 3. Come convertire un array di byte in un array int?
- 4. In Java, come posso convertire un InputStream in un array di byte (byte [])?
- 5. Come eseguire il marshalling di un array byte/uint8 come array json in Go?
- 6. Come convertire un array di byte in Base64 in Java?
- 7. Convertire un array di byte a una classe che contiene un array di byte in C#
- 8. Come posso convertire in modo sicuro un array di byte in una stringa e tornare indietro?
- 9. Come memorizzare una struttura all'interno di una struttura in go?
- 10. Come posso convertire una stringa con terminazione null in un buffer di byte in una stringa in Go?
- 11. Converti Go [] byte in un C * char
- 12. Come convertire da [] byte a int in Programmazione Go
- 13. Come convertire l'immagine in array di byte e array di byte in stringa Base64 in Android?
- 14. Come posso convertire una frase in un array di parole?
- 15. Come convertire una sequenza in un byte [] in Clojure?
- 16. Come convertire un XmlDocument in un array <byte>?
- 17. Come convertire NSData in array di byte in iPhone?
- 18. come convertire l'immagine in array di byte in java?
- 19. Come posso convertire un array di float in un byte [] e viceversa?
- 20. Come posso convertire il byte [] in BitmapImage?
- 21. Come posso convertire POI HSSFWorkbook in byte?
- 22. C# Come convertire System.Net.ConnectStream in un byte [] (array)
- 23. C#: Convertire array di byte in un galleggiante
- 24. Come convertire array di byte in qualsiasi tipo
- 25. Come convertire array di byte in file ZIP
- 26. Come posso convertire un array in un hash in Perl?
- 27. Come posso convertire un array di byte in double e back?
- 28. Conversione da int32 a byte array in go
- 29. Come posso convertire un vettore in un array di celle?
- 30. Come convertire un'immagine WriteableBitmap in array Byte in WinRt App
Grazie per la rapida risposta. La ragione per cui sto provando a fare questo è di essere in grado di ottenere un hash (sto cercando di usare SHA-256, ma potrebbe essere un altro) della mia struttura. Sai di un modo più semplice per farlo? – abw333
Ho modificato la risposta per mostrare un modo semplice per fare ciò che vuoi. –
Grazie ancora. Ho provato a farlo, ma ho ricevuto il seguente messaggio di errore: "valore multiplo fmt.Printf() nel contesto a valore singolo". Sai perché sta succedendo? – abw333