bitlvl
ES

Conversor de endianness

Escribe un valor y una anchura. Obtienes ambos órdenes de bytes, los bytes tal como se escribirían en memoria o en un paquete, y el código para intercambiarlos.

Anchura
La entrada es
 
  

Los resultados y mensajes de esta herramienta se muestran en inglés.

Qué es la endianness

Un número de varios bytes tiene que guardarse byte a byte, y hay dos órdenes razonables para hacerlo. Big-endian pone el byte más significativo en la dirección más baja, como escribimos los números: 0x12345678 se convierte en 12 34 56 78. Little-endian pone primero el byte menos significativo: 78 56 34 12. x86, x86-64 y (por defecto) ARM son little-endian; los protocolos de red (IP, TCP, DNS), los archivos de clase de Java, PNG y la mayoría de los formatos de mainframe son big-endian, por eso «orden de bytes de red» significa big-endian.

Cuándo importa

Dentro de un programa en una máquina, nunca: la CPU se encarga. Importa en cuanto los bytes cruzan una frontera: escribir un struct en un archivo, leer un paquete, hablar con un sensor por SPI, mapear un formato de archivo binario o interpretar un volcado hex. Leer 78 56 34 12 en un volcado de memoria x86 y tomarlo por 0x78563412 es el error clásico.

Las funciones

LenguajeHost → red (big-endian)Intercambio arbitrario
Chtonl, htons, htobe64__builtin_bswap32
Gobinary.BigEndian.PutUint32bits.ReverseBytes32
Pythonstruct.pack('>I', x)x.to_bytes(4, 'little')
Rustx.to_be_bytes()x.swap_bytes()
JavaScriptDataView.setUint32(o, x)DataView con littleEndian=true

UTF-16 y la BOM

El texto en UTF-16 tiene el mismo problema, por eso los archivos pueden empezar con una marca de orden de bytes: FE FF para big-endian, FF FE para little-endian. UTF-8 no tiene orden de bytes y no necesita BOM.

Preguntas

¿Qué endianness usa mi ordenador?

Casi seguro little-endian: todas las CPU x86 y x86-64 lo son, y ARM (teléfonos, Apple Silicon, Raspberry Pi) funciona en little-endian en la práctica. Big-endian sobrevive en los protocolos de red y en algunos sistemas embebidos y mainframes (s390x, PowerPC antiguos, SPARC).

¿Por qué la red es big-endian?

Convención histórica del primer ARPANET y de las máquinas IBM/Motorola, fijada en el RFC 1700. Todos los protocolos posteriores la siguen, por eso cada API de sockets tiene htons/htonl.

¿La endianness afecta a los bits dentro de un byte?

No. Un byte se lee siempre como un todo. El orden de los bits solo importa en protocolos serie y en algunos algoritmos CRC, y es una cuestión aparte.

¿Cómo detecto la endianness en tiempo de ejecución?

Escribe un 1 en un entero de 32 bits y mira el primer byte: 1 significa little-endian. En la práctica es mejor usar funciones de conversión explícitas para que el código funcione en todas partes.

¿Qué es middle-endian?

El PDP-11 guardaba los valores de 32 bits como dos mitades little-endian de 16 bits en orden big-endian (34 12 78 56). Está extinto, pero el término se sigue usando para formatos de fecha como MM-DD-YYYY.