Ola, somos Arume

Desenvolvemos páxinas web, aplicacións para móbiles, capas de realidade aumentada e aplicacións para Facebook. Apaixónanos a informática e somos uns perfeccionistas incurables; por eso nos nosos proxectos utilizamos estándares.

tel. 625 519 694

Mendaña de Neyra, 34, 3º B, 15008, A Coruña

Autenticarse

Rexistrarse. Esqueceches o teu contrasinal?

Etiquetas

Saltar as etiquetas

Subscríbete ás RSS

Estás en:

  • Inicio >
  • Blog >
  • Os formatos Big Endian e Little Endian

Os formatos Big Endian e Little Endian

02 Ago 2011 por Jose

Comentarios: 12

Orde

Do mesmo xeito que existen linguaxes onde a lectura e escritura pode ser esquerda-dereita ou dereita-esquerda tamén no mundo dos computadores pode suceder algo parecido. Neste artigo falaremos dos distintos xeitos nos que as máquinas poden almacenar os datos en ficheiros, que cobran especial relevancia cando se trata de traballar con datos de máis dun byte (Endianness), por exemplo números enteiros, números reais, ...

Á hora de expresar estes datos temos que definir o concepto de byte máis representativo (MSB) e byte menos representativo (LSB), que se denomina así ó byte que modificado altera o dato en maior medida e ó que o fai en menor medida. Por exemplo, expresando o número 13 como binario de 8 bits sería 0000 1101, o MSB sería 0000 e o LSB sería 1011 posto que, por exemplo, 0001 1011 = 27 dista máis que 0000 1111 = 15.

Pois ben, o formato Big Endian é aquel que ordena os bytes do máis significativo ó menos significativo e o Little Endian é o que o fai do menos significativo ó máis significativo. Vexamos como:

Big Endian

Este formato que pode parecer unha forma máis "natural" de escritura é utilizado por procesadores usados en máquinas Apple entre outras.

Os datos 13 e "trece" expresados en hexadecimal son 0x3133 e 0x74726563650d0a, pois ben escritos como datos de 2 bytes en formato Big Endian quedan:

0x31 0x33
e
0x74 0x72 0x65 0x63 0x65 0x0d 0x0a

Little Endian

Este formato é adoptado pola maioría de procesadores Intel.

Os mesmos datos hexadecimais de antes escritos como datos de 2 bytes en formato Little Endian quedan:

0x33 0x31
e
0x0a 0x0d 0x65 0x63 0x65 0x72 0x74

Dicir que existen algunhas arquitecturas que permiten elixir o Endianness a usar; estas coñécense co nome de Bi-endian.

En que me afecta isto a min?

En ocasións teremos que ler algún ficheiro de datos e deberemos coñecer baixo que formato foi creado, e modificalo no caso de que non coincida co da nosa máquina para que os datos sexan correctos ó procesalos.

Noutra ocasión falei do Bit Order Mask, pois esta é a forma que ten a codificación de caracteres Unicode de marcar se os datos foron gardados en Little Endian ou Big Endian.

  • 0xfe 0xff: UTF-16 Big Endian
  • 0xff 0xfe: UTF-16 Little Endian
  • 0x00 0x00 0xfe 0xff: UTF-32 Big Endian
  • 0xff 0xfe 0x00 0x00: UTF-32 Little Endian
  • 0xef 0xbb 0xbf: UTF-8

Comentarios

12 comentarios. Comentar.

1. Anónimo o 25 Abr 2013 ás 17:55:45

Los anteriores juegos de caracteres pueden ser guardados en las dos opciones.

Pero en En utf-8 ¿Cómo son guardados en Big o Litle?

Saludos

2. Anónimo o 03 Ago 2014 ás 09:11:20

En UTF-8 no interesa, ya que BE y LE afectan cuando son mas de 1 byte.

3. Anónimo o 22 Out 2014 ás 11:39:56

Gracias por el blog :))

5. Luis S. o 16 Feb 2015 ás 00:21:33

Los datos 13 y "trece" expresados en hexadecimal son 0x3133 y 0x74726563650d0a De dónde sale esa respuesta, que acaso 13 en hexadecimal no es 0xD ?

6. Luis o 16 Feb 2015 ás 12:49:52

Hola Luis S.

La conversión dada es de ASCII a hexadecimal, no de decimal a hexadecimal.

7. ivan o 22 Ago 2015 ás 18:47:07

Dentro de esta página pude entender de forma sencilla lo que significa los términos asi como su utilización básica

Dependiendo del sistema operativo en que se trabaje, hay que considerar el orden de los bytes en los tipos de datos numéricos que utilizan varios bytes. Existen dos formatos diferentes, denominados "Little Endian" y "Big Endian".

"Little Endian" significa que el byte de menor peso se almacena en la dirección más baja de memoria y el byte de mayor peso en la más alta.

Así, un Long Int de 4 bytes

Byte3 Byte2 Byte1 Byte0

se almacenará en memoria de la siguiente manera:

Dirección Base +0 ===> Byte0

Dirección Base +1 ===> Byte1

Dirección Base +2 ===> Byte2

Dirección Base +3 ===> Byte3

Los procesadores Intel (usados en la mayoría de los ordenadores personales) y los DEC Alpha RISC son "Little Endian".

En el formato "Big Endian" el byte de mayor peso se almacena en la dirección más baja de memoria y el byte de menor peso en la dirección más alta.

El Long Int anterior, se almacenaría ahora así:

Dirección Base +0 ===> Byte3

Dirección Base +1 ===> Byte2

Dirección Base +2 ===> Byte1

Dirección Base +3 ===> Byte0

La mayoría de los sistemas UNIX, el protocolo de Internet TCP, los procesadores Motorola 680x0 (y, por lo tanto, los Macintosh), Hewlett-Packard PA-RISC, y Sun SuperSPARC son "Big Endian". El MIPS de Silicon Graphics y el procesador IBM/Motorola PowerPC son capaces de entender ambos sistemas, por lo que se dice que son "bi-endian".

Como se puede ver la diferencia sustancial de estos dos formatos de almacenamiento es simplemente el orden de almacenamiento acuerdo a su valor o equivalencia

Por otra parte

En la forma "Little Endian", las instrucciones en ensamblador para elegir 1, 2, 4 o un número mayor de bytes proceden de la misma forma: primero se lee el byte de menor peso, que está en el offset (desplazamiento) 0.

Además, la relación 1:1 entre el offset y el número del byte hace que las rutinas matemáticas sean más sencillas de implementar.

En la forma "Big Endian", al tener el byte de mayor peso el primero, se puede comprobar de forma directa si el número es positivo o negativo sólo comprobando el primer byte (recordemos que el signo se almacena en el primer bit) y sin necesidad de saber la longitud del número.

Esta forma de representación coincide con el orden en que los números son escritos, de modo que las rutinas de conversión entre sistemas de numeración son más eficientes que si se realizaran en "Little Endian".

A la hora de realizar un programa, puede ser necesario conseguir que éste sepa diferenciar entre ambos formatos y actúe consecuentemente al que se esté utilizando.

Si se desea que un programa funcione en varias plataformas hay que tener en cuenta si éstas usan el mismo formato, y si es distinto adaptar el programa a ello. De lo contrario, si se utilizaran ficheros binarios el programa no funcionaría, al tomar valores incorrectos.

El protocolo TCP usa el formato "Big Endian", por lo que los sistemas que usan "Little Endian" deben convertir los datos al crear los paquetes TCP/IP.

Los formatos "Little Endian" y "Big Endian" pueden aplicarse, además de a la ordenación de los bytes, a la ordenación de los bits.

En un byte, un sistema que utilice "Little Endian" tendrá el bit de menor peso en el primer bit y el bit de mayor peso en el último bit. En un sistema "Big Endian", el bit de mayor peso estará en el primer bit y el de menor peso en el último.

Al aplicarse tanto a la ordenación de bytes como de bits, aprovechando las ventajas de cada uno, podemos encontrar sistemas en los que se utiliza el formato "Big Endian" para los bytes y el "Little Endian" para la ordenación de los bits internamente en cada byte, o viceversa.

8. Dublín o 09 Mai 2016 ás 21:28:06

Hola, disculpen pero me queda la duda la cual es: ¿Si está guardado el Big o Little endian, podría afectar al valor como tal?

9. Miguel Angel Cabrera Mouzo o 05 Mar 2017 ás 17:48:44

El número 13 expresado en 8 bits es 0000 1101 y no 000 1101 como habéis puesto vosotros, corregidlo porfa :)

10. Miguel Angel Cabrera Mouzo o 05 Mar 2017 ás 18:07:04

**y no 0000 1011**

11. Luis o 05 Mar 2017 ás 22:25:26

Efectivamente Miguel Angel, había un error en el artículo y lo hemos corregido.

Gracias.

12. Anónimo o 02 Mai 2017 ás 05:19:34

Luis, me parece que tu artículo confunde en vez de aclarar. Tu ejemplo con el 13 o "trece" es una cadena de caracteres o string. Los string como tales no sufren de endianess. Solo los números cuando se almacenan tienen ese problema y es relativo al diseño de las ALUs de los procesadores. Por favor corregir urgente porque es un ERROR GROSERO.

13. El Corrector de errores o 08 Nov 2017 ás 23:23:00

Lo corregiremos /o/

Comentar

Comentar de forma anónima

Podes comentar poñendo calquera nome ou alcume, exceptuando os nomes de usuarios rexistrados. Máximo de 50 caracteres.

Comentar como usuario rexistrado

Rexistrarse. Esqueceches o teu contrasinal?