← SEARCHABLE ARCHIVE
Computer Science · 2026-05-16

¿Qué es big endian y little endian?

¿Por qué invertir el orden de almacenamiento de los bytes?

INTERACTIVE READING MODE →

Los artículos escritos en este blog fueron creados con el objetivo de enseñar. Además, la información del artículo puede ser incorrecta, así que tenga cuidado.

Mientras codificaba, es posible que haya enviado datos a través de la red o haya leído un archivo específico. Hay casos en los que el valor resulta completamente diferente al que esperaba. El nombre oficial de este fenómeno es método de disposición Endianness. Es decir, se llaman Big Endian y Little Endian.

Cuando la CPU almacena datos de tipo int de 4 bytes en la memoria, no los empaqueta como un todo, sino que los divide en fragmentos de 1 byte y los almacena en la dirección en orden. En este momento, depende de si lo pones en orden comenzando desde el dígito más grande (MSB) o en orden inverso comenzando desde el dígito más pequeño (LSB). La forma en que se colocan los datos en la memoria es completamente diferente.

Si pones los números en un orden intuitivo, como si los leyera una persona, son big-endian, y si los pones en orden inverso para que a las máquinas les resulte más fácil calcularlos, son little-endian. La mayoría de las PC modernas, como las CPU Intel o AMD que utilizamos principalmente, adoptan el sistema little endian.

Comprobémoslo nosotros mismos con el código.

#include <iostream>
#include <iomanip>

int main() {
    //Datos enteros hexadecimales de 4 bytes
    unsigned int number = 0x12345678;

    //Lanzar un puntero para verificar cómo se almacena cada byte en la memoria
    unsigned char* bytePtr = reinterpret_cast<unsigned char*>(&number);

    for (int i = 0; i < sizeof(int); ++i) {
        std::cout << "&bytePtr[" << i << "] : 0x"
                  << std::hex << std::setw(2) << std::setfill('0')
                  << (int)bytePtr[i] << std::endl;
    }

    /*
     * Basado en el sistema little endian
     * &bytePtr[0] : 0x78 //La unidad más pequeña (LSB) va primero a la dirección más baja
     * &bytePtr[1] : 0x56
     * &bytePtr[2] : 0x34
     * &bytePtr[3] : 0x12
     *
     * Basado en el sistema big endian
     * &bytePtr[0] : 0x12 //La unidad más grande (MSB) va primero a la dirección más baja.
     * &bytePtr[1] : 0x34
     * &bytePtr[2] : 0x56
     * &bytePtr[3] : 0x78
     */

    return 0;
}

Aquí surge una pregunta. El mismo valor se almacena de todos modos, ¿Por qué adoptaron un método poco intuitivo para almacenar datos al revés, como el little endian? Esto se debe al diseño del sumador dentro de la CPU y a la eficiencia de la conversión de tipos.

Cuando la CPU suma o resta dos números, debe calcular desde el lugar de los 1, es decir, el dígito más pequeño, para poder realizar el acarreo. En little endian, la unidad más pequeña (LSB) se ubica en la primera dirección en la memoria, Tan pronto como la CPU lee la memoria, puede comenzar inmediatamente a realizar operaciones aritméticas. Además, al abatir truncando un entero de 4 bytes a 1 byte (char), La lógica del hardware se simplifica enormemente porque solo es necesario extraer la dirección inicial de la memoria sin ningún cálculo de dirección adicional.

Por otro lado, big-endian es intuitivo para que los humanos lo lean cuando miran el volcado de memoria, Al comparar el tamaño de dos números, tiene la ventaja de poder compararse desde el primer dígito. Entonces, para evitar confusiones al intercambiar datos, En las comunicaciones estándar de red, como el Protocolo de Internet (TCP/IP), se utiliza big-endian como estándar.