Saltar a contenido

Última actualización:2026-10-12

Orden de bytes endian en C++20

En las entrevistas, el orden de bytes suele ser un punto muy importante a evaluar; se suelen preguntar cosas como:

  • El concepto de big-endian y little-endian
  • Cómo determinar si un sistema es big-endian o little-endian
  • El orden de bytes del host
  • El orden de bytes de red
  • Etcétera

, en realidad hay muchas formas de distinguirlo, por ejemplo:

  • El endian de C++20
  • union
  • Conversión de direcciones
  • htons

En esta sección explicaremos el uso y los fundamentos del orden de bytes en C++20.

Nota: versión para impacientes, el código fuente con las 4 formas de detectar el orden de bytes ya está en el Planeta; si te interesa, consíguelo allí.

1.Fundamentos del orden de bytes

El orden de bytes de un sistema es el orden en que los bytes se almacenan en memoria o se transmiten por la red. Los sistemas big-endian almacenan el byte más significativo (MSB) en la dirección de memoria más baja. Este es el orden que usan los diversos protocolos de red para enviar datos a través de la red, también conocido como orden de bytes de red. En los sistemas little-endian, el byte menos significativo (LSB) se almacena en la dirección de memoria más baja. Por ejemplo, el número hexadecimal 0x12345678 se almacena así:

  • Big-endian:
地址     | 值

n       | 0x12
n + 1   | 0x34
n + 2   | 0x56
n + 3   | 0x78
  • Little-endian
地址    | 值

n       | 0x78
n + 1   | 0x56
n + 2   | 0x34
n + 3   | 0x12

Según la arquitectura, distintos sistemas pueden tener como orden de bytes del host big-endian o little-endian.

2.La importancia del orden de bytes

¿Y por qué es esto importante? Si necesitas enviar datos por la red, debes asegurarte de que se transmiten en orden de bytes de red. En la mayoría de los casos, el orden de bytes de tu host será little-endian, lo que significa que tendrás que invertir el orden de los bytes antes de transmitir los datos.

3.Comprobar el orden de bytes

C++20 introdujo una forma más sencilla y portable de comprobar el orden de bytes: std::endian. Puedes usar std::endian::native para comprobar el orden de bytes del host del sistema. He aquí un ejemplo sencillo:

void checkEndianness() {
  if constexpr (std::endian::native == std::endian::little) {
    std::cout << "小端" << std::endl;
  } else if constexpr (std::endian::native == std::endian::big) {
    std::cout << "大端" << std::endl;
  } else {
    std::cout << "未知" << std::endl;
  }
}

Temas relacionados

Comentarios