Saltar al contenido
Biblioteca GKUn lugar para las mentes curiosas
Español

La computadora que lee el mismo número al revés, Endianness (orden de los bytes)

¿Qué pasaría si dos personas recibieran la misma carta y una la leyera de izquierda a derecha mientras la otra la leyera de derecha a izquierda? En el mundo de las computadoras ocurre algo muy parecido. Cada computadora puede colocar en la memoria los bytes de un número de varios bytes en un orden distinto, y la palabra que designa ese orden es «endianness» (orden de los bytes).

La endianness es, dicho de forma sencilla, «el orden que determina qué byte se coloca primero cuando un valor formado por varios bytes se guarda en la memoria o se transmite». El nombre procede de la novela Gulliver’s Travels (Los viajes de Gulliver), publicada en 1726 por Jonathan Swift. En la novela, los habitantes de Lilliput y Blefuscu llegan a la guerra por decidir si un huevo cocido debe romperse por el extremo grande (big end) o por el extremo pequeño (little end). En 1980, el informático Danny Cohen comparó el debate sobre el orden de los bytes con esta guerra del huevo en su artículo «On Holy Wars and a Plea for Peace» y difundió los términos big-endian y little-endian.

En este artículo veremos, por orden, por qué surgió la endianness, la diferencia entre big-endian y little-endian, los problemas que aparecen cuando se encuentran computadoras con distinta endianness y cómo se maneja hoy la endianness.


¿Por qué extremo romper el huevo? La endianness

1. ¿Por qué surgió la endianness?

Un módulo de memoria de computadora verde con una fila de chips negros, colocado en diagonal sobre un escritorio oscuro e iluminado con luz azul

La memoria de una computadora tiene direcciones asignadas por bytes (8 bits). Sin embargo, un solo número entero suele ocupar varios bytes, por ejemplo 2, 4 u 8. Por eso, al repartir un valor entre varias celdas, hay que decidir qué byte se coloca primero.

(1) Direcciones por byte
Cada celda de la memoria tiene una dirección, como 0, 1, 2…, y en cada celda cabe solo 1 byte. Para guardar un entero de 4 bytes se necesitan cuatro celdas consecutivas.

(2) Posiciones altas y bajas
En el valor hexadecimal 0x12345678, 12 es el byte más significativo, el que ocupa la posición más alta, y 78 es el byte menos significativo, el que ocupa la posición más baja. El orden en que se colocan estos cuatro bytes a partir de la dirección más baja es precisamente la endianness.

(3) Una elección sin respuesta correcta
Cualquiera de los dos órdenes da el mismo resultado en los cálculos siempre que se use de forma coherente dentro de una misma computadora. Por eso, los primeros fabricantes de computadoras eligieron cada uno el orden que más convenía a su diseño, y esa diferencia continúa hasta hoy.


2. La diferencia entre big-endian y little-endian

Sobre una mesa de desayuno de madera iluminada por el sol de la mañana, dos hueveras de porcelana blanca sostienen cada una un huevo cocido: uno roto por el extremo grande y redondeado y el otro por el extremo pequeño y puntiagudo

Supongamos que guardamos 0x12345678 en cuatro celdas a partir de la dirección 100. El método big-endian coloca los bytes desde la dirección 100 en el orden 12, 34, 56, 78, mientras que el método little-endian los coloca al revés: 78, 56, 34, 12.

Infografía sobre endianness: bajo el título «Endianness: el orden de los bytes», el valor 0x12345678 aparece dividido en cuatro bloques (12 azul marino, 34, 56 y 78 naranja) con las etiquetas «Byte más significativo» y «Byte menos significativo». Debajo hay dos filas de celdas de memoria en las direcciones 100 a 103: la fila «Big-endian», junto a un huevo roto por el extremo grande, contiene 12, 34, 56, 78, y la fila «Little-endian», junto a un huevo roto por el extremo pequeño, contiene 78, 56, 34, 12 mediante flechas punteadas cruzadas
Incluso con el mismo valor 0x12345678, big-endian coloca primero en la memoria la posición más alta y little-endian, la más baja.
  • Big-endian (Big-endian): método que coloca el byte más significativo en la dirección más baja, igual que el orden en que las personas escriben los números.
  • Little-endian (Little-endian): método que coloca el byte menos significativo en la dirección más baja; lo usan los procesadores de la familia Intel x86.
  • Bi-endian (Bi-endian): diseño compatible con ambos métodos, como ARM y PowerPC.
  • Byte más significativo (Most Significant Byte): el byte que ocupa la posición más alta de un valor; a menudo se abrevia como MSB.

(1) Ventajas de big-endian
Al leer el contenido de la memoria desde el principio, el número aparece en el mismo orden en que se escribe, lo que facilita su revisión. Procesadores como los mainframes de IBM y el Motorola 68000 usaban este método.

(2) Ventajas de little-endian
Como la posición más baja está en la dirección más baja, al leer 1, 2 o 4 bytes desde la misma dirección la parte baja del valor sigue coincidiendo. También resulta natural para la suma, que calcula los acarreos empezando por la posición más baja.

(3) Distinta del orden de los bits
La endianness suele referirse al orden en que se colocan los bytes. El orden de los bits dentro de un byte casi nunca preocupa a los programas, porque el procesador trata cada byte como una unidad.


3. Cuando se encuentran computadoras con distinta endianness

Bajo una cálida lámpara de escritorio, dos computadoras portátiles colocadas frente a frente sobre una mesa de madera están conectadas por un solo cable de red azul

Dentro de una misma computadora, la endianness casi no se nota. El problema aparece cuando los datos se pasan, mediante un archivo o una red, a una computadora con una endianness diferente.

(1) Números leídos al revés
Cuando una computadora little-endian guarda el entero 1 en 4 bytes, queda como 01 00 00 00. Si una computadora big-endian lee esos bytes tal cual, obtiene 0x01000000, es decir, el valor absurdo de 16 777 216.

(2) El problema NUXI
Al trasladar datos del PDP-11, que usaba little-endian en unidades de 16 bits, a una máquina que usaba otro método, la palabra «UNIX» podía leerse como «NUXI». Cada par de bytes había intercambiado su lugar, y ese nombre se convirtió en un apodo para los problemas de orden de bytes.

(3) Errores difíciles de encontrar
Como todo funciona bien al probar entre máquinas del mismo tipo y los valores solo fallan al conectarse con otro tipo, encontrar la causa suele llevar mucho tiempo.


4. Cómo se maneja hoy la endianness

Un conmutador de red instalado en un rack de una sala de servidores, con cables de red azules y grises conectados ordenadamente en cada puerto y pequeñas luces indicadoras verdes encendidas

Como no se puede eliminar la diferencia de endianness, los desarrolladores resuelven el problema acordando de antemano el orden que se usará al intercambiar datos.

(1) Orden de bytes de red
Los protocolos de internet (TCP/IP) adoptaron big-endian como orden estándar. Por eso, en lenguajes como C se usan funciones como htonl (host to network long) y ntohl para cambiar el orden antes de enviar y después de recibir.

(2) Órdenes fijados por los formatos
Los archivos de clase de Java están definidos en big-endian, y la codificación de caracteres UTF-16 coloca al principio una marca de orden de bytes (BOM): FE FF indica big-endian y FF FE indica little-endian.

(3) El predominio de little-endian
Como x86 y la mayoría de los dispositivos ARM funcionan en little-endian, en las computadoras personales y los teléfonos inteligentes de hoy little-endian se ha convertido, en la práctica, en la norma. Aun así, big-endian sigue presente en las redes y en muchos formatos de archivo, por lo que la conversión sigue siendo necesaria.

Así como un huevo sabe igual se rompa por el extremo que se rompa, la endianness no es una cuestión de qué lado tiene razón, sino de ponerse de acuerdo en una convención. La sencilla idea de fijar el orden antes de pasar los datos: ese es el primer paso para entender la endianness.

Guarda este artículo en PDF

Compra la edición en el idioma que has seleccionado del artículo que estás leyendo.

US$1.00
Idioma seleccionado: Español

US$1.00 · 1 artículo · 1 idioma

Una vez realizada la compra, puedes volver a descargar la edición que compraste iniciando sesión con la misma cuenta.

Ver una muestra del PDF ↗Puedes leer el artículo completo gratis. La muestra te permite ver la tipografía y la estructura del archivo.