Что такое Big-Endian и Little-Endian (порядок байтов)?

Ответ

Big-Endian и Little-Endian — это два способа упорядочивания байтов при представлении многобайтовых чисел в памяти компьютера или при передаче по сети.

Представим 4-байтное число 0x0A0B0C0D (A - старший байт, D - младший).

Big-Endian (Сетевой порядок байтов)

Старший байт (Most Significant Byte) записывается по младшему адресу памяти. Порядок байтов соответствует привычному нам чтению чисел слева направо.

  • Память: 0A 0B 0C 0D
  • Применение: Стандарт для сетевых протоколов (TCP/IP), поэтому его и называют "сетевым порядком".

Little-Endian

Младший байт (Least Significant Byte) записывается по младшему адресу памяти. Порядок байтов "перевернут".

  • Память: 0D 0C 0B 0A
  • Применение: Используется в большинстве современных процессоров (x86, ARM).

Когда это важно для Go-разработчика?

При работе с бинарными данными, особенно при взаимодействии с сетью или файлами, созданными другими системами. В Go для этого используется пакет encoding/binary.

Пример на Go:

package main

import (
    "encoding/binary"
    "fmt"
)

func main() {
    var num uint32 = 0x0A0B0C0D
    buf := make([]byte, 4)

    // Запись в Big-Endian (сетевой порядок)
    binary.BigEndian.PutUint32(buf, num)
    fmt.Printf("Big-Endian:    % xn", buf) // Вывод: 0a 0b 0c 0d

    // Запись в Little-Endian (порядок x86)
    binary.LittleEndian.PutUint32(buf, num)
    fmt.Printf("Little-Endian: % xn", buf) // Вывод: 0d 0c 0b 0a
}