Konvertierung der Golang-Bytereihenfolge

PHPz
Freigeben: 2023-05-14 15:03:37
Original
731 Leute haben es durchsucht

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.

  1. Binäre Dekodierung

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
}
Nach dem Login kopieren

Der obige Code dekodiert den Bytestream [0x10, 0x27, 0x00, 0x00] in Little-Endian-Reihenfolge in eine Variable i vom Typ int32.

  1. Binäre Kodierung

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]
}
Nach dem Login kopieren

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.

  1. Big-Endian-Konvertierung

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]
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage