Ответ
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
}