2010-11-29 5 views
1

Ich habe gerade gestern mit Go begonnen, also entschuldige ich mich im Voraus für die dumme Frage.Konvertieren von mehreren Bytes in einem Array in einen anderen Typ in Go

Stellen Sie sich vor, dass ich ein Byte-Array haben, wie:

func main(){ 
    arrayOfBytes := [10]byte{1,2,3,4,5,6,7,8,9,10} 
} 

Was nun, wenn ich, wie wenn man die ersten vier Bytes des Arrays gefühlt und es als eine ganze Zahl mit? Oder vielleicht habe ich eine Struktur, die wie folgt aussieht:

type eightByteType struct { 
    a uint32 
    b uint32 
} 

Kann ich leicht die ersten 8 Bytes meiner Array und schalten Sie ihn in ein Objekt vom Typ eightByteType?

Ich weiß, das sind zwei verschiedene Fragen, aber ich denke, dass sie ähnliche Antworten haben können. Ich habe die Dokumentation durchgesehen und habe kein gutes Beispiel dafür gesehen.

Die Fähigkeit, einen Block von Bytes in irgendwas umzuwandeln, ist eines der Dinge, die ich an C wirklich mag. Hoffentlich kann ich es immer noch in Go machen.

Antwort

2

Blick auf encoding/binary sowie bytes.Buffer

TL; DR Version:

import (
    "encoding/binary" 
    "bytes" 
) 

func main() { 
    var s eightByteType 
    binary.Read(bytes.NewBuffer(array[:]), binary.LittleEndian, &s) 
} 

Ein paar Dinge zu hier beachten: Wir übergeben Array [:], alternativ können Sie Ihr Array als erklären Slice stattdessen ([]byte{1, 2, 3, 4, 5}) und lassen Sie den Compiler sorgen über Größen, etc, und eightByteType wird nicht funktionieren, wie es ist (IIRC), weil binary.Read private Felder nicht berühren. Das würde funktionieren:

type eightByteType struct { 
    A, B uint32 
} 
+0

Das war exzellent! Vielen Dank! –

+0

Kopiert dieser Code tatsächlich Daten aus dem Array in die Struktur? – ithkuil

+0

@ithkuil was meinst du? Eigentlich kopieren im Gegensatz zu was? – cthom06

Verwandte Themen