
En informática , el orden de bytes ( endianness ) se refiere al orden en que los bytes dentro de un tipo de dato de palabra se transmiten a través de un medio de comunicación de datos o se direccionan en la memoria de la computadora , considerando únicamente la importancia del byte en comparación con su antigüedad. El orden de bytes se expresa principalmente como big-endian ( BE ) o little-endian ( LE ).
Las computadoras almacenan información en grupos de bits binarios de distintos tamaños . A cada grupo se le asigna un número, llamado dirección , que la computadora utiliza para acceder a esos datos. En la mayoría de las computadoras modernas, el grupo de datos más pequeño con una dirección tiene ocho bits de longitud y se denomina byte . Los grupos más grandes constan de dos o más bytes; por ejemplo, una palabra suele contener 32 o 64 bits .
Existen dos formas principales en que una computadora puede numerar los bytes individuales en un grupo más grande, comenzando desde cualquiera de los extremos. Un sistema big-endian almacena el byte más significativo de una palabra en la dirección de memoria más pequeña y el byte menos significativo en la más grande. Un sistema little-endian, en cambio, almacena el byte menos significativo en la dirección más pequeña. [ 1 ] [ 2 ] [ 3 ] De los dos, big-endian se asemeja más a la forma en que se escriben los dígitos de los números de izquierda a derecha en inglés, con el dígito más significativo primero, comparando dígitos con bytes y asumiendo que las direcciones aumentan de izquierda a derecha.
Ambos tipos de orden de bytes (endianness) se utilizan ampliamente en la ingeniería electrónica digital. La elección inicial del orden de bytes en un nuevo diseño suele ser arbitraria, pero las revisiones y actualizaciones tecnológicas posteriores perpetúan el orden de bytes existente para mantener la compatibilidad con versiones anteriores . El orden de bytes grande (big-endianness) es el dominante en los protocolos de red, como en el conjunto de protocolos de Internet , donde se denomina orden de red y transmite primero el byte más significativo. Por el contrario, el orden de bytes pequeño (little-endianness) es el dominante en las arquitecturas de procesadores ( x86 , la mayoría de las implementaciones ARM , las implementaciones base de RISC-V ) y su memoria asociada. Los formatos de archivo pueden usar cualquiera de los dos órdenes; algunos formatos usan una combinación de ambos o contienen un indicador del orden utilizado en todo el archivo. [ 4 ]
El orden de bytes es una característica compatible con numerosas arquitecturas informáticas que permiten la conmutación del orden de bytes en la lectura y el almacenamiento de datos o en la lectura de instrucciones. Otros ordenamientos se denominan genéricamente orden medio o orden mixto . [ 5 ] [ 6 ] [ 7 ] [ 8 ]
Origen

La endianidad se expresa principalmente como big-endian (BE) o little-endian (LE), términos introducidos por Danny Cohen en una nota de experimento de Internet publicada en 1980. [ 9 ] Cohen tomó prestados los términos de un episodio absurdo de la novela satírica Los viajes de Gulliver de Jonathan Swift . En la tierra imaginaria de Lilliput , los eruditos están ferozmente divididos por un debate interminable sobre cómo romper correctamente la cáscara de un huevo cocido . Quienes insisten en romper el extremo más grande de la cáscara son big-endians, mientras que sus oponentes que rompen el extremo opuesto de la cáscara son little-endians. [ 10 ] [ 11 ]
Características
La memoria de una computadora consta de una secuencia de celdas de almacenamiento ( las unidades direccionables más pequeñas ); en las máquinas que admiten direccionamiento por bytes , estas unidades se denominan bytes . Cada byte se identifica y se accede a él, tanto en hardware como en software, mediante su dirección de memoria . Si el número total de bytes en la memoria es n , las direcciones se enumeran del 0 al n − 1.
Los programas informáticos suelen utilizar estructuras de datos o campos que pueden contener más datos de los que caben en un byte. En el contexto de este artículo, donde su tipo no puede ser arbitrariamente complejo, un campo consiste en una secuencia consecutiva de bytes y representa un valor de datos simple que, al menos potencialmente, puede ser manipulado por una única instrucción de hardware . En la mayoría de los sistemas, la dirección de un valor de datos simple de varios bytes es la dirección de su primer byte (el byte con la dirección más baja). Existen excepciones a esta regla ; por ejemplo, la instrucción Add del IBM 1401 accede a los campos de longitud variable en su posición de orden inferior (dirección más alta), y sus longitudes se definen mediante una marca de palabra establecida en su posición de orden superior (dirección más baja). Cuando se realiza una operación como la suma, el procesador comienza en las posiciones de orden inferior en las direcciones altas de los dos campos y avanza hacia abajo hasta el orden superior. [ 12 ]
Otro atributo importante de un byte que forma parte de un campo es su significado . Estos atributos de las partes de un campo desempeñan un papel importante en la secuencia en la que el hardware de la computadora accede a los bytes, más precisamente: por los algoritmos de bajo nivel que contribuyen a los resultados de una instrucción de computadora.
Números
Los sistemas de numeración posicional (principalmente de base 2, o con menos frecuencia de base 10) son la forma predominante de representar y, en particular, de manipular datos enteros por parte de las computadoras. En su forma pura, esto es válido para enteros no negativos de tamaño moderado, por ejemplo, del tipo de datos C. unsignedEn dicho sistema de numeración, el valor de un dígito que contribuye al número completo se determina no solo por su valor como dígito individual, sino también por la posición que ocupa en el número completo, llamada su significancia. Estas posiciones se pueden asignar a la memoria principalmente de dos maneras: [ 13 ]
- La disminución de la importancia numérica con el aumento de las direcciones de memoria, conocida como big-endian y
- La importancia numérica aumenta con el aumento de las direcciones de memoria, lo que se conoce como little-endian .
En big-endian y little-endian , el final es el extremo donde se escribe el significado de big o little en la ubicación indexada por la dirección de memoria más baja.
Texto
Cuando se comparan cadenas de caracteres (texto), por ejemplo, para implementar algún mecanismo como la ordenación , esto se realiza con frecuencia de forma lexicográfica, donde un único elemento posicional (carácter) también tiene un valor posicional. La comparación lexicográfica implica casi siempre que el primer carácter tiene mayor prioridad, como en la guía telefónica. Casi todas las máquinas que pueden realizar esta comparación con una sola instrucción son big-endian o, al menos, mixed-endian.
Los números enteros escritos como texto siempre se representan en memoria con el dígito más significativo primero, lo que es similar al formato big-endian, independientemente de la dirección del texto .
Direccionamiento por bytes
Cuando los bytes de memoria se imprimen secuencialmente de izquierda a derecha (por ejemplo, en un volcado hexadecimal ), la representación little-endian de los enteros tiene un significado que disminuye de derecha a izquierda. En otras palabras, al visualizarla, aparece al revés, lo cual puede resultar contraintuitivo.
Este comportamiento surge, por ejemplo, en FourCC o técnicas similares que implican empaquetar caracteres en un entero, de modo que se convierte en una secuencia de caracteres específicos en la memoria. Por ejemplo, tomemos la cadena "JOHN", almacenada en ASCII hexadecimal . En máquinas big-endian, el valor aparece de izquierda a derecha, coincidiendo con el orden correcto de la cadena para leer el resultado ("JOH N"). Pero en una máquina little-endian, se vería "NHO J". Las máquinas middle-endian complican aún más esto; por ejemplo, en el PDP-11 , un número de coma flotante de 32 bits se almacena como dos palabras de 16 bits "JO" "HN" en big-endian, con los caracteres de las palabras de 16 bits almacenados en little-endian, lo que resulta en "OJN H". [ 14 ]
Intercambio de bytes
El intercambio de bytes consiste en reorganizar los bytes para cambiar el orden de bytes (endianness). Muchos compiladores proporcionan funciones integradas que probablemente se compilen en instrucciones nativas del procesador ( bswap/ movbe), como __builtin_bswap32. Las interfaces de software para el intercambio incluyen:
- Funciones de endianness de red estándar (desde/hacia BE, hasta 32 bits). [ 15 ] Windows tiene una extensión de 64 bits en
winsock2.h. - Funciones BSD y Glibc
endian.h(desde/hacia BE y LE, hasta 64 bits). [ 16 ] - Macros de macOS
OSByteOrder.h(desde/hacia BE y LE, hasta 64 bits). - La
std::byteswapfunción en C++23 . [ 17 ]
Algunos conjuntos de instrucciones de CPU proporcionan soporte nativo para el intercambio de bytes endian, como bswap[ 18 ] ( x86 — 486 y posteriores, i960 — i960Jx y posteriores [ 19 ] ), y rev[ 20 ] ( ARMv6 y posteriores).
Algunos compiladores tienen funciones integradas para el intercambio de bytes. Por ejemplo, GNU Fortran y el compilador Intel FortranCONVERT admiten el especificador no estándar al abrir un archivo, p. ej.: . [ 21 ] [ 22 ] Otros compiladores tienen opciones para generar código que habilita globalmente la conversión para todas las operaciones de E/S de archivos. Esto permite la reutilización de código en un sistema con orden de bytes opuesto sin modificar el código.OPEN(unit,CONVERT='BIG_ENDIAN',...)
Consideraciones
Acceso simplificado a parte de un campo.
En la mayoría de los sistemas, la dirección de un valor multibyte es la dirección de su primer byte (el byte con la dirección más baja); los sistemas little-endian de este tipo tienen la propiedad de que, para valores de datos suficientemente bajos, el mismo valor se puede leer de la memoria en diferentes longitudes sin usar direcciones diferentes (incluso cuando se imponen restricciones de alineación ). Por ejemplo, una ubicación de memoria de 32 bits con contenido 4A 00 00 00se puede leer en la misma dirección que una de 8 bits (valor = 4A), 16 bits (004A), 24 bits (00004A) o 32 bits (0000004A), todas las cuales conservan el mismo valor numérico. Aunque esta propiedad little-endian rara vez la usan directamente los programadores de alto nivel, ocasionalmente la emplean los optimizadores de código, así como los programadores de lenguaje ensamblador . Si bien no está permitido por C++, este tipo de código de juego de tipos está permitido como "definido por la implementación" por el estándar C11 [ 23 ] y se usa comúnmente [ 24 ] en código que interactúa con hardware. [ 25 ]
Orden de cálculo
En los sistemas de numeración posicional, algunas operaciones tienen un orden natural o preferido para la ejecución de los pasos elementales. Este orden puede afectar su rendimiento en procesadores y microcontroladores de pequeño tamaño con direccionamiento por bytes . Sin embargo, los procesadores de alto rendimiento suelen recuperar operandos de varios bytes de la memoria en el mismo tiempo que tardarían en recuperar un solo byte, por lo que la complejidad del hardware no se ve afectada por el orden de los bytes.
La suma, la resta y la multiplicación comienzan en la posición del dígito menos significativo y propagan el acarreo a la siguiente posición más significativa. En la mayoría de los sistemas, la dirección de un valor multibyte es la de su primer byte (el byte con la dirección más baja). La implementación de estas operaciones es ligeramente más sencilla en máquinas little-endian, donde este primer byte contiene el dígito menos significativo.
La comparación y la división comienzan en el dígito más significativo y propagan un posible acarreo a los dígitos menos significativos subsiguientes. Para valores numéricos de longitud fija (normalmente de 1, 2, 4, 8 o 16 caracteres), la implementación de estas operaciones es ligeramente más sencilla en máquinas big-endian.
Algunos procesadores big-endian (por ejemplo, el IBM System/360 y sus sucesores) contienen instrucciones de hardware para comparar lexicográficamente cadenas de caracteres de longitud variable .
La transmisión normal de datos mediante una instrucción de asignación es, en principio, independiente del orden de bytes del procesador.
Hardware
Muchos procesadores históricos y actuales utilizan una representación de memoria big-endian, ya sea exclusivamente o como opción de diseño. El IBM System/360 utiliza el orden de bytes big-endian, al igual que sus sucesores System/370 , ESA/390 y z/Architecture . El PDP-10 utiliza direccionamiento big-endian para instrucciones orientadas a bytes. El miniordenador IBM Series/1 utiliza el orden de bytes big-endian. Los procesadores Motorola 6800/6801 , 6809 y la serie 68000 utilizan el formato big-endian. Las arquitecturas exclusivamente big-endian incluyen IBM z/Architecture y OpenRISC . Sin embargo, el miniordenador PDP-11 utiliza el orden de bytes little-endian, al igual que su sucesor VAX .
El Datapoint 2200 utilizaba lógica bit-serial simple con little-endian para facilitar la propagación del acarreo . Cuando Intel desarrolló el microprocesador 8008 para Datapoint, utilizó little-endian para compatibilidad. Sin embargo, como Intel no pudo entregar el 8008 a tiempo, Datapoint utilizó un equivalente de integración de escala media , pero el little-endian se mantuvo en la mayoría de los diseños de Intel, incluidos el MCS-48 y el 8086 y sus sucesores x86 , incluidos los procesadores IA-32 y x86-64 . [ 26 ] [ 27 ] La familia MOS Technology 6502 (incluidos Western Design Center 65802 y 65C816 ), el Zilog Z80 (incluidos Z180 y eZ80 ), el Altera Nios II , el Atmel AVR , el Andes Technology NDS32, el Qualcomm Hexagon y muchos otros procesadores y familias de procesadores también son little-endian.
El Intel 8051 , a diferencia de otros procesadores Intel, espera direcciones de 16 bits para LJMP y LCALL en formato big-endian; sin embargo, las instrucciones xCALL almacenan la dirección de retorno en la pila en formato little-endian. [ 28 ]
Bi-endianidad
Algunas arquitecturas de conjuntos de instrucciones incluyen una configuración que permite cambiar el orden de bytes en las operaciones de lectura y escritura de datos, lectura de instrucciones o ambas; estas arquitecturas se denominan bi-endian . Las arquitecturas que admiten el cambio de orden de bytes incluyen PowerPC / Power ISA , SPARC V9, ARM versiones 3 y superiores, DEC Alpha , MIPS , Intel i860 , PA-RISC , SuperH SH-4 , IA-64 , C-Sky y RISC-V . Esta característica puede mejorar el rendimiento o simplificar la lógica de los dispositivos y el software de red. El término bi-endian , cuando se refiere al hardware, indica la capacidad de la máquina para procesar o transmitir datos en cualquiera de los dos formatos de bytes.
Muchas de estas arquitecturas se pueden cambiar mediante software para que utilicen por defecto un formato endian específico (normalmente se hace cuando se inicia el ordenador); sin embargo, en algunos sistemas, el endianness predeterminado lo selecciona el hardware de la placa base y no se puede cambiar mediante software (por ejemplo, Alpha, que solo funciona en modo big-endian en el Cray T3E ).
IBM AIX e IBM i se ejecutan en modo big-endian en Power ISA bi-endian; Linux originalmente se ejecutaba en modo big-endian, pero para 2019, IBM había hecho la transición al modo little-endian para Linux para facilitar la portabilidad del software Linux de x86 a Power. [ 29 ] [ 30 ] SPARC no tiene una implementación little-endian relevante, ya que tanto Oracle Solaris como Linux se ejecutan en modo big-endian en sistemas SPARC bi-endian, y pueden considerarse big-endian en la práctica. ARM, C-Sky y RISC-V no tienen implementaciones big-endian relevantes y pueden considerarse little-endian en la práctica.
El término bi-endian se refiere principalmente a cómo un procesador gestiona los accesos a datos. Los accesos a instrucciones (búsquedas de palabras de instrucción) en un procesador determinado pueden seguir asumiendo un orden de bytes fijo, incluso si los accesos a datos son completamente bi-endian, aunque esto no siempre es así, como en la CPU Itanium basada en IA-64 de Intel , que permite ambos.
Algunas CPU nominalmente bi-endian requieren la ayuda de la placa base para cambiar completamente el orden de bytes. Por ejemplo, los procesadores PowerPC de 32 bits orientados a ordenadores de sobremesa en modo little-endian se comportan como tales desde el punto de vista de los programas en ejecución, pero requieren que la placa base realice un intercambio de 64 bits en las 8 líneas de bytes para garantizar que la configuración little-endian se aplique a los dispositivos de E/S . En ausencia de este hardware especial de la placa base, el software del controlador del dispositivo debe escribir en direcciones diferentes para deshacer la transformación incompleta y también debe realizar un intercambio de bytes normal.
Algunas CPU, como muchos procesadores PowerPC destinados a uso embebido y casi todos los procesadores SPARC, permiten elegir el orden de bytes por página.
Los procesadores SPARC desde finales de la década de 1990 (procesadores compatibles con SPARC v9) permiten elegir el orden de bytes de los datos con cada instrucción individual que carga o almacena datos en la memoria.
La arquitectura ARM admite dos modos big-endian, llamados BE-8 y BE-32 . [ 31 ] Las CPU hasta ARMv5 solo admiten BE-32 o modo invariante de palabra. Aquí, cualquier acceso de 32 bits alineado naturalmente funciona como en el modo little-endian, pero el acceso a un byte o palabra de 16 bits se redirige a la dirección correspondiente y no se permite el acceso no alineado. ARMv6 introduce BE-8 o modo invariante de byte, donde el acceso a un solo byte funciona como en el modo little-endian, pero el acceso a una palabra de 16 bits, 32 bits o (a partir de ARMv8) 64 bits resulta en un intercambio de bytes de los datos. Esto simplifica el acceso a memoria no alineada, así como el acceso mapeado en memoria a registros que no sean de 32 bits.
Muchos procesadores tienen instrucciones para convertir una palabra en un registro al orden de bytes opuesto, es decir, intercambian el orden de los bytes en una palabra de 16, 32 o 64 bits.
Las CPU de arquitectura Intel x86 y x86-64 recientes tienen una instrucción MOVBE ( Intel Core desde la generación 4, después de Atom ), [ 32 ] que obtiene una palabra en formato big-endian de la memoria o escribe una palabra en la memoria en formato big-endian. Por lo demás, estos procesadores son completamente little-endian.
También hay dispositivos que utilizan formatos diferentes en distintos lugares. Por ejemplo, el medidor de batería BQ27421 de Texas Instruments utiliza el formato little-endian para sus registros y el formato big-endian para su memoria de acceso aleatorio .
SPARC utilizó históricamente el formato big-endian hasta la versión 9, que ahora es bi-endian. De manera similar, los primeros procesadores IBM POWER eran big-endian, pero los descendientes de PowerPC y Power ISA ahora son bi-endian. La arquitectura ARM era little-endian antes de la versión 3, cuando pasó a ser bi-endian.
Punto flotante
Aunque muchos procesadores usan almacenamiento little-endian para todos los tipos de datos (entero, punto flotante), hay varias arquitecturas de hardware donde los números de punto flotante se representan en formato big-endian mientras que los enteros se representan en formato little-endian. [ 33 ] Hay procesadores ARM que tienen representación de punto flotante mixed-endian para números de doble precisión: cada una de las dos palabras de 32 bits se almacena como little-endian, pero la palabra más significativa se almacena primero. El punto flotante VAX almacena palabras little-endian de 16 bits en orden big-endian. Debido a que ha habido muchos formatos de punto flotante sin una representación estándar de red para ellos, el estándar XDR usa big-endian IEEE 754 como su representación. Por lo tanto, puede parecer extraño que el estándar de punto flotante IEEE 754, ampliamente extendido , no especifique el endianness. [ 34 ] Teóricamente, esto significa que incluso los datos de punto flotante IEEE estándar escritos por una máquina podrían no ser legibles por otra. Sin embargo, en los ordenadores modernos estándar (es decir, que implementan IEEE 754), se puede asumir con seguridad que el orden de bytes es el mismo para los números de coma flotante que para los enteros, lo que simplifica la conversión independientemente del tipo de dato. No obstante, los sistemas embebidos pequeños que utilizan formatos especiales de coma flotante pueden presentar un problema diferente.
Datos de longitud variable
La mayoría de las instrucciones consideradas hasta ahora contienen el tamaño (longitud) de sus operandos dentro del código de operación . Las longitudes de operando disponibles con frecuencia son 1, 2, 4, 8 o 16 bytes. Pero también hay arquitecturas donde la longitud de un operando puede almacenarse en un campo separado de la instrucción o junto con el operando mismo, por ejemplo, mediante una marca de palabra . Este enfoque permite longitudes de operando de hasta 256 bytes o más. Los tipos de datos de dichos operandos son cadenas de caracteres o BCD . Las máquinas capaces de manipular dichos datos con una sola instrucción (por ejemplo, compare, add) incluyen la IBM 1401 , 1410 , 1620 , System/360 , System/370 , ESA/390 y z/Architecture , todas ellas de tipo big-endian.
Endo medio
Son posibles numerosas otras configuraciones, denominadas genéricamente middle-endian o mixed-endian .
El PDP-11 es principalmente un sistema little-endian de 16 bits. Las instrucciones para convertir entre valores de punto flotante y enteros en el procesador de punto flotante opcional del PDP-11/45, PDP-11/70 y algunos procesadores posteriores, almacenaban valores enteros largos de doble precisión de 32 bits con las mitades de 16 bits intercambiadas respecto al orden little-endian esperado. El compilador C de UNIX utilizaba el mismo formato para enteros largos de 32 bits. Este ordenamiento se conoce como PDP-endian . [ 35 ]
UNIX fue uno de los primeros sistemas en permitir compilar el mismo código para plataformas con diferentes representaciones internas. Uno de los primeros programas convertidos debía imprimir Unix, pero en la Series/1 imprimió nUxien su lugar. [ 36 ]
Una forma de interpretar este orden de bytes es que almacena un entero de 32 bits como dos palabras de 16 bits en formato little-endian, con un orden de palabras big-endian:
Los descriptores de segmento de los procesadores IA-32 y compatibles mantienen una dirección base de 32 bits del segmento almacenada en orden little-endian, pero en cuatro bytes no consecutivos, en las posiciones relativas 2, 3, 4 y 7 del inicio del descriptor. [ 37 ]
Software
Diseño lógico
Los lenguajes de descripción de hardware (HDL) que se utilizan para expresar la lógica digital suelen admitir cualquier orden de bytes, con una granularidad arbitraria. Por ejemplo, en SystemVerilog , una palabra puede definirse como little-endian o big-endian.
Archivos y sistemas de archivos
Es importante reconocer el orden de bytes al leer un archivo o sistema de archivos creado en un ordenador con un orden de bytes diferente.
Los archivos secuenciales sin formato de Fortran creados con un orden de bytes determinado generalmente no se pueden leer en un sistema que utilice el orden de bytes opuesto, ya que Fortran suele implementar un registro (definido como los datos escritos por una sola instrucción de Fortran) como datos precedidos y seguidos por campos de conteo, que son enteros iguales al número de bytes de los datos. Intentar leer un archivo de este tipo utilizando Fortran en un sistema con el orden de bytes opuesto produce un error en tiempo de ejecución, debido a que los campos de conteo son incorrectos.
El texto Unicode puede comenzar opcionalmente con una marca de orden de bytes (BOM) para indicar el orden de bytes del archivo o flujo. Su punto de código es U+FEFF. En UTF-32 , por ejemplo, un archivo big-endian debe comenzar con 00 00 FE FF; un archivo little-endian debe comenzar con FF FE 00 00.
Los formatos de datos binarios de las aplicaciones, como los archivos .mat de MATLAB o el formato de datos .bil , utilizado en topografía, suelen ser independientes del orden de bytes. Esto se logra almacenando los datos siempre en un orden de bytes fijo o incluyendo un interruptor para indicar dicho orden. Un ejemplo del primer caso es el formato de archivo binario XLS , que es portable entre sistemas Windows y Mac y siempre little-endian, lo que obliga a la aplicación Mac a intercambiar los bytes al cargar y guardar cuando se ejecuta en un procesador Motorola 68K o PowerPC big-endian. [ 38 ]
Los archivos de imagen TIFF son un ejemplo de la segunda estrategia, cuyo encabezado indica a la aplicación el orden de bytes de sus enteros binarios internos. Si un archivo comienza con la firma, MMsignifica que los enteros se representan como big-endian, mientras que IIsignifica little-endian. Estas firmas necesitan una sola palabra de 16 bits cada una y son palíndromos , por lo que son independientes del orden de bytes. Irepresenta a Intel y Mrepresenta a Motorola . Las CPU de Intel son little-endian, mientras que las CPU Motorola 680x0 son big-endian. Esta firma explícita permite que un programa lector de TIFF intercambie bytes si es necesario cuando un archivo determinado fue generado por un programa escritor de TIFF que se ejecuta en una computadora con un orden de bytes diferente.
Como consecuencia de su implementación original en la plataforma Intel 8080, el sistema de archivos FAT ( Tabla de Asignación de Archivos ), independiente del sistema operativo, está definido con un orden de bytes little-endian, incluso en plataformas que utilizan otro orden de bytes de forma nativa, lo que requiere operaciones de intercambio de bytes para mantener la FAT en estas plataformas.
ZFS , que combina un sistema de archivos y un gestor de volúmenes lógicos , es conocido por proporcionar endianness adaptativo y por funcionar con sistemas big-endian y little-endian. [ 39 ]
Redes de contactos
Muchos RFC de la IETF utilizan el término orden de red , que se refiere al orden de transmisión de bytes a través del cable en los protocolos de red . Entre otros, el histórico RFC 1700 define el orden de red para los protocolos del conjunto de protocolos de Internet como big-endian. [ 40 ]
Sin embargo, no todos los protocolos utilizan el orden de bytes big-endian como orden de red. El protocolo Server Message Block (SMB) utiliza el orden de bytes little-endian. En CANopen , los parámetros multibyte siempre se envían con el byte menos significativo primero (little-endian). Lo mismo ocurre con Ethernet Powerlink . [ 41 ]
La API de sockets de Berkeley define un conjunto de funciones para convertir enteros de 16 y 32 bits al orden de bytes de red y viceversa: las funciones (host-to-network-short) y (host-to-network-long) convierten valores de 16 y 32 bits respectivamente del orden de máquina ( host ) al orden de red; las funciones y convierten del orden de red al orden de host. [ 42 ] [ 43 ] Estas funciones pueden no tener efecto en un sistema big-endian.htonshtonlntohsntohl
Si bien los protocolos de red de alto nivel suelen considerar el byte (generalmente octeto ) como su unidad atómica, las capas inferiores de una pila de red pueden gestionar el orden de los bits dentro de un byte. El orden de los bits se conoce a veces como little-endian o big-endian. El orden de los bits no tiene por qué coincidir con el orden de los bytes. Por ejemplo, RS-232 transmite los bits menos significativos primero, I2C los transmite los más significativos primero y SPI puede enviarse en cualquiera de los dos órdenes. Ethernet transmite los bits individuales menos significativos primero, pero los bytes se envían en formato big-endian.
Véase también
- Orden de bits : Convención para identificar las posiciones de los bits. Páginas que muestran descripciones breves de los destinos de redireccionamiento.
Referencias
- ↑ "Entendiendo el orden de bytes big-endian y little-endian" . betterexplained.com . Archivado del original el 24 de mayo de 2019. Consultado el 20 de mayo de 2019 .
- ↑ "Ordenación de bytes PPC" . Archivado del original el 9 de mayo de 2019. Consultado el 20 de mayo de 2019 .
- ↑ "Escribiendo código independiente del orden de bytes en C" . Archivado del original el 10 de junio de 2019. Consultado el 20 de mayo de 2019 .
- ↑ Un formato de archivo para el intercambio de imágenes en Internet . IETF . Abril de 1992. pág. 7. doi : 10.17487/RFC1314 . RFC 1314. Consultado el 16 de agosto de 2021 .
- ↑ "Pionero del Salón de la Fama de Internet" . Salón de la Fama de Internet . The Internet Society . Archivado del original el 21/07/2021 . Consultado el 07/10/2015 .
- ↑ Cary, David. "Preguntas frecuentes sobre Endian" . Archivado del original el 9 de noviembre de 2017. Consultado el 11 de octubre de 2010 .
- ↑ James, David V. (junio de 1990). "Buses multiplexados: las guerras de endian continúan". IEEE Micro . 10 (3): 9– 21. Bibcode : 1990IMicr..10c...9J . doi : 10.1109/40.56322 . ISSN 0272-1732 . S2CID 24291134 .
- ↑ Blanc, Bertrand; Maaraoui, Bob (diciembre de 2005). "Endianness or Where is Byte 0?" (PDF) . Archivado (PDF) del original el 3 de diciembre de 2007. Recuperado el 21 de diciembre de 2008 .
- ↑ Cohen, Danny (1980-04-01). Sobre las guerras santas y una súplica por la paz . IETF . IEN 137.También publicado en Cohen, Danny (octubre de 1981). "Sobre las guerras santas y una súplica por la paz". IEEE Computer . 14 (10): 48– 54. Bibcode : 1981Compr..14j..48C . doi : 10.1109/CM.1981.220208 .
- ↑ Swift, Jonathan (1726). "Un viaje a Lilliput, capítulo IV" . Los viajes de Gulliver . Archivado del original el 20 de septiembre de 2022. Consultado el 20 de septiembre de 2022 .
- ↑ Bryant, Randal E.; David, O'Hallaron (2016), Sistemas informáticos: Una perspectiva del programador (3.ª ed.), Pearson Education, pág. 79, ISBN 978-1-488-67207-1
- ↑ Resumen del sistema IBM 1401 (PDF) . IBM. Abril de 1966. pág. 15. A24-1401-1. Archivado (PDF) del original el 10 de octubre de 2022.
- ↑ Tanenbaum, Andrew S.; Austin, Todd M. (4 de agosto de 2012). Organización estructurada de computadoras . Prentice Hall PTR. ISBN 978-0-13-291652-3Consultado el 18 de mayo de 2013 .
- ↑ Manual del procesador PDP11 – PDP11/05/10/35/40 (PDF) . Digital Equipment Corporation. Abril de 1973. Archivado (PDF) del original el 2 de julio de 2025.Véase la figura 2-6.
- ↑ – Manual del programador de Linux – Funciones de la biblioteca de Manned.org
- ↑ – Manual del programador de Linux – Funciones de la biblioteca de Manned.org
- ↑ "std::byteswap" . en.cppreference.com . Archivado del original el 20 de noviembre de 2023. Consultado el 3 de octubre de 2023 .
- ↑ "Manual del desarrollador de software para arquitecturas Intel 64 e IA-32, volumen 2 (2A, 2B y 2C): Referencia del conjunto de instrucciones, AZ" (PDF) . Intel. Septiembre de 2016. págs. 3-112. Archivado (PDF) del original el 9 de octubre de 2022. Consultado el 5 de febrero de 2017 .
- ↑ "Manual del desarrollador del procesador i960® VH" (PDF) . Intel. Octubre de 1998. Archivado (PDF) del original el 2 de abril de 2024. Consultado el 2 de abril de 2024 .
- ↑ "Manual de referencia ARMv8-A" . ARM Holdings . Archivado del original el 19 de enero de 2019. Consultado el 5 de febrero de 2017 .
- ↑ "OPEN: CONVERT Specifier" . Guía y referencia para desarrolladores de Intel® Fortran Compiler Classic e Intel® Fortran Compiler . Consultado el 29 de junio de 2026 .
- ↑ "Especificador CONVERT" . gcc.gnu.org . Consultado el 29 de junio de 2026 .
- ↑ "Norma C11" . ISO. Sección 6.5.2.3 "Estructura y miembros de la unión", §3 y nota al pie 95. Archivado del original el 28 de marzo de 2020. Recuperado el 15 de agosto de 2018 .
- ↑ "3.10 Opciones que controlan la optimización: -fstrict-aliasing" . Colección de compiladores GNU (GCC) . Fundación del Software Libre. Archivado del original el 1 de julio de 2023. Recuperado el 15 de agosto de 2018 .
- ↑ Torvalds, Linus (5 de junio de 2018). " [ GIT PULL ] Actualización del marco de propiedades del dispositivo para v4.18-rc1" . Linux Kernel (Lista de correo). Archivado del original el 15 de agosto de 2018. Recuperado el 15 de agosto de 2018 .
- ↑ House, David; Faggin, Federico; Feeney, Hal; Gelbach, Ed; Hoff, Ted; Mazor, Stan; Smith, Hank (21 de septiembre de 2006). "Panel de historia oral sobre el desarrollo y la promoción del microprocesador Intel 8008" (PDF) . Museo de Historia de la Computación . pág. b5. Archivado (PDF) del original el 29 de junio de 2014. Recuperado el 23 de abril de 2014 .
- ^ Lunde, Ken (13 de enero de 2009). Procesamiento de Información CJKV . O'Reilly Media, Inc. pág. 29.ISBN 978-0-596-51447-1Consultado el 21 de mayo de 2013 .
- ↑ "Guía del usuario de Cx51: E. Ordenación de bytes" . keil.com . Archivado del original el 2 de abril de 2015. Consultado el 28 de marzo de 2015 .
- ↑ Jeff Scheel (16 de junio de 2016). "Little endian y Linux en IBM Power Systems" . IBM . Archivado del original el 27 de marzo de 2022. Consultado el 27 de marzo de 2022 .
- ↑ Timothy Prickett Morgan (10 de junio de 2019). "La transición a RHEL 8 comienza en Power Systems" . ITJungle . Archivado del original el 24 de enero de 2022. Consultado el 26 de marzo de 2022 .
- ↑ "Diferencias entre los autobuses BE-32 y BE-8" . Archivado del original el 12 de febrero de 2019. Consultado el 10 de febrero de 2019 .
- ↑ "Cómo detectar la compatibilidad con nuevas instrucciones en la familia de procesadores Intel® Core™ de cuarta generación" (PDF) . Archivado (PDF) del original el 20 de marzo de 2016. Consultado el 2 de mayo de 2017 .
- ↑ Savard, John JG (2018) [2005], "Formatos de punto flotante" , quadibloc , archivado del original el 3 de julio de 2018 , recuperado el 16 de julio de 2018
- ↑ "pack – convierte una lista en una representación binaria" . Archivado del original el 18 de febrero de 2009. Consultado el 4 de febrero de 2009 .
- ↑ Manual del procesador PDP-11/45 (PDF) . Digital Equipment Corporation . 1973. pág. 165. Archivado (PDF) del original el 9 de octubre de 2022.
- ↑ Jalics, Paul J.; Heines, Thomas S. (1 de diciembre de 1983). "Transportando un sistema operativo portátil: UNIX a una minicomputadora IBM" . Communications of the ACM . 26 (12): 1066– 1072. doi : 10.1145/358476.358504 . S2CID 15558835 .
- ↑ Manual del programador de la arquitectura AMD64, volumen 2: Programación del sistema (PDF) (Informe técnico). 2013. pág. 80. Archivado del original (PDF) el 18 de febrero de 2018.
- ↑ "Especificación del formato de archivo binario de Microsoft Office Excel 97-2007 (*.xls formato 97-2007)" . Microsoft Corporation. 2007. Archivado del original el 22 de diciembre de 2008. Consultado el 18 de agosto de 2014 .
- ↑ Matt Ahrens (2016). FreeBSD Kernel Internals: An Intensive Code Walkthrough . OpenZFS Documentation/Read Write Lecture. Archivado del original el 14 de abril de 2016. Consultado el 30 de marzo de 2016 .
- ↑ Reynolds, J. ; Postel, J. (octubre de 1994). "Notaciones de datos" . Números asignados . IETF . pág. 3. doi : 10.17487/RFC1700 . STD 2. RFC 1700. Consultado el 2 de marzo de 2012 .
- ↑ Grupo de estandarización Ethernet POWERLINK (2012), Propuesta de borrador de trabajo EPSG 301: Especificación del perfil de comunicación Ethernet POWERLINK Versión 1.1.4 , capítulo 6.1.1.
- ↑ IEEE y The Open Group (2018). "3. Interfaces del sistema". The Open Group Base Specifications Issue 7 . Vol. 2. p. 1120. Archivado del original el 18-04-2021 . Recuperado el 09-04-2021 .
- ↑ "htonl(3) - Página man de Linux" . linux.die.net . Archivado del original el 18 de abril de 2021. Consultado el 9 de abril de 2021 .
Enlaces externos
Definición de endianness en el diccionario Wikcionario
- Memoria de computadora
- Transmisión de datos
- Metáforas
- guerras de software