Golang ist eine moderne Programmiersprache, die eine Vielzahl integrierter Funktionen und Datentypen bietet, um Programmierern die Bewältigung verschiedener Aufgaben zu erleichtern. Die Endian-Konvertierung ist ebenfalls ein sehr wichtiger Vorgang. In diesem Artikel wird ausführlich erläutert, wie die Endian-Konvertierung in Golang durchgeführt wird.
Was ist Bytereihenfolge?
Im Computerspeicher ist ein Byte die kleinste Speichereinheit, und jedes Byte besteht aus 8 Binärbits. Endianness bezieht sich auf die Reihenfolge, in der Bytes im Speicher angeordnet sind, wenn Multibyte-Daten wie Ganzzahlen und Gleitkommazahlen gespeichert werden. Es gibt zwei Arten der Bytereihenfolge: Big Endian und Little Endian.
Big-Endian bezieht sich auf die Speichermethode, bei der das höherwertige Byte das erste und das niederwertige Byte das letzte ist. Es wird häufig bei der Netzwerkübertragung und der CPU der meisten Computer verwendet. Beispielsweise ist die binäre Darstellung der Zahl 10 0000 1010. Bei Speicherung in Big-Endian-Reihenfolge lautet die Reihenfolge im Speicher: 0000 1010.
Little Endian ist eine Speichermethode mit niederwertigem Byte zuerst und höherwertigem Byte. Sie wird häufig in einigen Prozessorarchitekturen verwendet, z. B. in der Intel x86- und ARM-Architektur. Die Reihenfolge der Zahl 10 im Little-Endian-Speicher lautet beispielsweise: 1010 0000.
Endian-Konvertierung in Golang
In Golang verwendet die Endian-Konvertierung hauptsächlich das Paket „encoding/binary“ in der Standardbibliothek. Dieses Paket bietet mehrere Funktionen zum Konvertieren der Bytereihenfolge, einschließlich binärer Decodierung und Codierung, Big- und Small-Endian-Konvertierung usw.
Die Funktionsreihe „Lesen“ im Paket „encoding/binary“ wird verwendet, um den Bytestrom in den entsprechenden Datentyp zu dekodieren. Darunter verfügt die Funktion „binary.Read“ über drei Parameter: den Eingabebyte-Stream, den Zeiger des Zielobjekts und den verwendeten Endian-Typ. Zum Beispiel:
func main() { bytes := []byte{0x10, 0x27, 0x00, 0x00} var i int32 err := binary.Read(bytes.NewReader(bytes), binary.LittleEndian, &i) if err != nil { log.Fatal("binary.Read failed:", err) } fmt.Println(i) // Output: 10000 }
Der obige Code dekodiert den Bytestream [0x10, 0x27, 0x00, 0x00] in Little-Endian-Reihenfolge in eine Variable i vom Typ int32.
Die Funktionsreihe „Schreiben“ im Paket „encoding/binary“ wird verwendet, um den Datentyp in der angegebenen Bytereihenfolge in einen Binärstrom zu kodieren. Darunter verfügt die Funktion „binary.Write“ über drei Parameter: den Ausgabebyte-Stream, den verwendeten Endian-Typ und den zu kodierenden Wert. Zum Beispiel:
func main() { var i int32 = 10000 buf := new(bytes.Buffer) err := binary.Write(buf, binary.LittleEndian, i) if err != nil { log.Fatal("binary.Write failed:", err) } fmt.Println(buf.Bytes()) // Output: [0x10 0x27 0x00 0x00] }
Der obige Code codiert die Variable i vom Typ int32 mit einem Wert von 10000 in einen Bytestream [0x10, 0x27, 0x00, 0x00], wobei die Bytereihenfolge Little Endian ist.
Zusätzlich zur oben genannten binären Dekodierung und Kodierung bietet das Paket „encoding/binary“ auch zwei Funktionen zum Konvertieren der Bytereihenfolge: BigEndian und LittleEndian.
„BigEndian“ kodiert und dekodiert Datentypen in Netzwerk-Byte-Reihenfolge (Big Endian), während „LittleEndian“ Datentypen in Little Endian-Reihenfolge kodiert und dekodiert. Beispiel:
func main() { var i int32 = 10000 buf := new(bytes.Buffer) binary.Write(buf, binary.BigEndian, i) fmt.Println(buf.Bytes()) // Output: [0x27 0x10 0x00 0x00] buf.Reset() binary.Write(buf, binary.LittleEndian, i) fmt.Println(buf.Bytes()) // Output: [0x10 0x27 0x00 0x00] }
Der obige Code codiert die Variable i vom Typ int32 in Big-Endian- und Little-Endian-Reihenfolge, und die Ausgabebyteströme sind [0x27, 0x10, 0x00, 0x00] bzw. [0x10, 0x27, 0x00, 0x00].
Zusammenfassung
Das Paket „encoding/binary“ in Golang bietet eine Fülle von Funktionen für die Konvertierung der Bytereihenfolge, einschließlich binärer Dekodierung und Kodierung, Big-Endian-Konvertierung usw. Mithilfe dieser Funktionen können Entwickler problemlos eine Endian-Konvertierung durchführen und die Speicherung und Übertragung von Multibyte-Daten problemlos verwalten.
Das obige ist der detaillierte Inhalt vonKonvertierung der Golang-Bytereihenfolge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!