2 Stimmen

Konvertierung mehrerer Bytes in einem Array in einen anderen Typ in Go

Ich habe erst gestern mit Go angefangen, also entschuldige ich mich im Voraus für die dumme Frage.

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

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

Was wäre nun, wenn ich die ersten vier Bytes dieses Arrays als Ganzzahl verwenden wollte? Oder vielleicht habe ich eine Struktur, die wie folgt aussieht:

type eightByteType struct {
    a uint32
    b uint32
}

Kann ich einfach die ersten 8 Bytes meines Arrays nehmen und sie in ein Objekt des Typs eightByteType verwandeln?

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

Die Möglichkeit, einen Block von Bytes auf irgendetwas zu werfen, ist eines der Dinge, die ich an C wirklich mag. Hoffentlich kann ich das in Go immer noch tun.

3voto

cthom06 Punkte 8999

Blick auf encoding/binary と同様に 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 sind hier zu beachten: wir übergeben array[:], alternativ könnten Sie Ihr Array stattdessen als Slice deklarieren ( []byte{1, 2, 3, 4, 5} ) und überlässt es dem Compiler, sich um Größen usw. zu kümmern, und eightByteType funktioniert so nicht (IIRC), weil binary.Read berührt keine privaten Felder. Dies würde funktionieren:

type eightByteType struct {
    A, B uint32
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X