fbpx
Wikipedia

Endianness

El término inglés endianness ("extremidad") designa el formato en el que se almacenan los datos de más de un byte en un ordenador. El problema es similar a los idiomas en los que se escriben de derecha a izquierda, como el árabe, o el hebreo, frente a los que se escriben de izquierda a derecha, pero trasladado de la escritura al almacenamiento en memoria de los bytes.

Definición

No se debe confundir trivialmente el orden de escritura textual en este artículo con el orden de escritura en memoria, por ello establecemos que lo que escribimos primero lleva índices de memoria más bajos, y lo que escribimos a continuación lleva índices más elevados, que lo que lleva índices bajos es previo en memoria, y así sucesivamente, siguiendo la ordenación natural de menor a mayor, por ejemplo la secuencia {0,1,2} indicaría, -algo más allá de la intuición- que 0 es previo y contiguo en el espacio de memoria a 1, etc.

Usando este criterio el sistema big-endian adoptado por Motorola entre otros, consiste en representar los bytes en el orden "natural": así el valor hexadecimal 0x4A3B2C1D se codificaría en memoria en la secuencia {4A, 3B, 2C, 1D}. En el sistema little-endian adoptado por Intel, entre otros, el mismo valor se codificaría como {1D, 2C, 3B, 4A}, de manera que de este modo se hace más intuitivo el acceso a datos, porque se efectúa fácilmente de manera incremental de menos relevante a más relevante (siempre se opera con incrementos de contador en la memoria), en un paralelismo a "lo importante no es como empiezan las cosas, sino como acaban."

Algunas arquitecturas de microprocesador pueden trabajar con ambos formatos (ARM, PowerPC, DEC Alpha, PA-RISC, Arquitectura MIPS), y a veces son denominadas sistemas middle-endian.

Etimología

La nomenclatura de los criterios little-endian y big-endian proviene de la novela Los viajes de Gulliver de Jonathan Swift, hace referencia a una sociedad donde había dos grupos enemistados, uno sostenía que los huevos duros se tenían que empezar a comer por el extremo grande (big end) o otros por el pequeño (little end). De ahí que big endian se debe entender como "de comienzo por el extremo mayor" y little endian como "de comienzo por el extremo pequeño", aunque es propenso a confundirse con "acaba en grande" y "acaba en pequeño". Su etimología proviene de un juego de palabras en inglés con los términos compuestos little-end-in y big-end-in.[1]

Ejemplos

Ejemplo 1

Un código simple en lenguaje C para detectar si una máquina es little-endian o big-endian:

#include <stdio.h> #include <stdint.h> int main(void) { int16_t i = 1; int8_t *p = (int8_t *) &i; if (p[0] == 1) printf("Little Endian\n"); else  printf("Big Endian\n"); return 0; } 

La explicación de su funcionamiento es sencilla, primero obtenemos la dirección de memoria de un entero (por tanto su espacio de almacenamiento es de 16 bits, i.e. 2 bytes) de valor 1 (0001h en hexadecimal). Descomponiendo numéricamente en bytes el valor 00h es el de mayor importancia numérica y el 01h el de menor. Lo que hacemos entonces es leer (desde memoria) solamente el primer byte del mismo (de ahí la conversión a int8_t*), y si es 0 (00h) entonces la ordenación es de comienzo por el extremo mayor (big-endian), si es 1 (0x01) es de comienzo por el extremo menor (little-endian).

Ejemplo 2

Este está basado en el orden de lectura de los bytes

#include <stdio.h> int main() { union { short s; char c[sizeof(short)]; } un; un.s = 0x0102; if(sizeof(short) == 2) { if(un.c[0] == 1 && un.c[1] == 2)  printf("big-endian\n"); else if(un.c[0] == 2 && un.c[1] == 1)  printf("little-endian\n"); else  printf("unknown\n"); } else { printf("sizeof(short) = %d\n", sizeof(short)); } return(0); } 

Ejemplo 3

Utilizando estructuras union

union endianness { short short_16;  // [______16______] unsigned char char_8[sizeof(short)]; // [___8__][___8__] }endianness; endianness.short_16 = 0xFF00; // 1111 1111 0000 0000 en binario (endianness.char_8[0] == 0x00 && endianness.char_8[1] == 0xFF)? printf("Little endian\n"): printf("Big endian\n"); 

Ejemplo 4

Utilizando el módulo sys del lenguaje Python

import sys print(sys.byteorder) # 'little' o 'big' 

Ejemplo 5

Utilizando el lenguaje Perl

use Config; print $Config{byteorder} == 12345678 ? 'little-endian' : 'big-endian'; 

Referencias

  1. «Explanation of Big Endian and Little Endian Architecture». Consultado el 2009. 

Enlaces externos

  • Endianess: Big Endian y Little Endian
  • El formato "Big Endian" y el "Little Endian"
  •   Datos: Q339338
  •   Multimedia: Endianness

endianness, término, inglés, endianness, extremidad, designa, formato, almacenan, datos, más, byte, ordenador, problema, similar, idiomas, escriben, derecha, izquierda, como, árabe, hebreo, frente, escriben, izquierda, derecha, pero, trasladado, escritura, alm. El termino ingles endianness extremidad designa el formato en el que se almacenan los datos de mas de un byte en un ordenador El problema es similar a los idiomas en los que se escriben de derecha a izquierda como el arabe o el hebreo frente a los que se escriben de izquierda a derecha pero trasladado de la escritura al almacenamiento en memoria de los bytes Indice 1 Definicion 2 Etimologia 3 Ejemplos 3 1 Ejemplo 1 3 2 Ejemplo 2 3 3 Ejemplo 3 3 4 Ejemplo 4 3 5 Ejemplo 5 4 Referencias 5 Enlaces externosDefinicion EditarNo se debe confundir trivialmente el orden de escritura textual en este articulo con el orden de escritura en memoria por ello establecemos que lo que escribimos primero lleva indices de memoria mas bajos y lo que escribimos a continuacion lleva indices mas elevados que lo que lleva indices bajos es previo en memoria y asi sucesivamente siguiendo la ordenacion natural de menor a mayor por ejemplo la secuencia 0 1 2 indicaria algo mas alla de la intuicion que 0 es previo y contiguo en el espacio de memoria a 1 etc Usando este criterio el sistema big endian adoptado por Motorola entre otros consiste en representar los bytes en el orden natural asi el valor hexadecimal 0x4A3B2C1D se codificaria en memoria en la secuencia 4A 3B 2C 1D En el sistema little endian adoptado por Intel entre otros el mismo valor se codificaria como 1D 2C 3B 4A de manera que de este modo se hace mas intuitivo el acceso a datos porque se efectua facilmente de manera incremental de menos relevante a mas relevante siempre se opera con incrementos de contador en la memoria en un paralelismo a lo importante no es como empiezan las cosas sino como acaban Algunas arquitecturas de microprocesador pueden trabajar con ambos formatos ARM PowerPC DEC Alpha PA RISC Arquitectura MIPS y a veces son denominadas sistemas middle endian Etimologia EditarLa nomenclatura de los criterios little endian y big endian proviene de la novela Los viajes de Gulliver de Jonathan Swift hace referencia a una sociedad donde habia dos grupos enemistados uno sostenia que los huevos duros se tenian que empezar a comer por el extremo grande big end o otros por el pequeno little end De ahi que big endian se debe entender como de comienzo por el extremo mayor y little endian como de comienzo por el extremo pequeno aunque es propenso a confundirse con acaba en grande y acaba en pequeno Su etimologia proviene de un juego de palabras en ingles con los terminos compuestos little end in y big end in 1 Ejemplos EditarEjemplo 1 Editar Un codigo simple en lenguaje C para detectar si una maquina es little endian o big endian include lt stdio h gt include lt stdint h gt int main void int16 t i 1 int8 t p int8 t amp i if p 0 1 printf Little Endian n else printf Big Endian n return 0 La explicacion de su funcionamiento es sencilla primero obtenemos la direccion de memoria de un entero por tanto su espacio de almacenamiento es de 16 bits i e 2 bytes de valor 1 0001h en hexadecimal Descomponiendo numericamente en bytes el valor 00h es el de mayor importancia numerica y el 01h el de menor Lo que hacemos entonces es leer desde memoria solamente el primer byte del mismo de ahi la conversion a int8 t y si es 0 00h entonces la ordenacion es de comienzo por el extremo mayor big endian si es 1 0x01 es de comienzo por el extremo menor little endian Ejemplo 2 Editar Este esta basado en el orden de lectura de los bytes include lt stdio h gt int main union short s char c sizeof short un un s 0x0102 if sizeof short 2 if un c 0 1 amp amp un c 1 2 printf big endian n else if un c 0 2 amp amp un c 1 1 printf little endian n else printf unknown n else printf sizeof short d n sizeof short return 0 Ejemplo 3 Editar Utilizando estructuras union union endianness short short 16 16 unsigned char char 8 sizeof short 8 8 endianness endianness short 16 0xFF00 1111 1111 0000 0000 en binario endianness char 8 0 0x00 amp amp endianness char 8 1 0xFF printf Little endian n printf Big endian n Ejemplo 4 Editar Utilizando el modulo sys del lenguaje Python import sys print sys byteorder little o big Ejemplo 5 Editar Utilizando el lenguaje Perl use Config print Config byteorder 12345678 little endian big endian Referencias Editar Explanation of Big Endian and Little Endian Architecture Consultado el 2009 Enlaces externos EditarEndianess Big Endian y Little Endian El formato Big Endian y el Little Endian Datos Q339338 Multimedia EndiannessObtenido de https es wikipedia org w index php title Endianness amp oldid 125248425, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos