[eside-ghost] Little Endian

Alvaro Uría fermat en movimage.com
Mar Jul 5 19:07:51 CEST 2005


Aupi,

Jon Fernandez [05/07/05 16:46 +0200] escribió:
> Una preguntilla rápida.

Una respuesta que me ha llevao un rato... :-D

> El tema esta que si lo leo a saco, fread(&buffer,sizeof(int),1,fichero),
> lo lee de puta madre en un entero.

Sip. Incluso un
	int i=1<<16;
	printf("%i\n",a);

Tiene que devolverte lo mismo en ambas arquitecturas (lo acabo de probar para
no ir de listo xDDD).

> Mi pregunta es la siguiente: ¿Cuando nos afecta que un fichero sea Big
> Endian o Little Endian? ¿Cuando tengo que darle la vuelta al orden de
> los bytes? ¿Solo al acceder a él byte a byte? ¿Si accedemos sizeof(tipo
> de dato) a sizeof(tipo de dato) el propio kernel nos lo 'ordena'?

El problema que yo veo son 2: cuando algo que está en 32 bits lo vas a
manejar en 16 bits (en plan... 0x12345678 -> pasará a ser 0x1234 en PowerPC y
0x5678 en x86).

Y también... cuando quieres meter datos en un fichero (o pillar datos para
tratarlos). Yo te recomiendo unas funciones de red (ntohl [Network to Host
long (32 bits)] y htonl [Host to Network long (32 bits)], o las similares
para 16 bits 'ntohs' y 'htons') que te convierten la info a Big-Endian (por
lo menos el 'network order' es Big Endian), y así no tienes dudas en qué
formato está y cómo tratarlo -> solución: siempre a Big-Endian.

El sizeof te saca el tamaño en memoria, pero no en que orden está (creo).

> Venga lowlevel-eros, una miniexplicación.

Ahora que venga un experto, que yo digo las cosas sin mucha confianza O:)

Saludos,
-- 
    ,____________,
    .'          '.
   /~~~~^~~~^~^~~~\
  /      _    /||  \  Alvaro Uría (0x5109E791)
 ;      ( }   \||D  ;  <fermat at movimage.com>
 |    | /\__,=[_]   |  
 ;  ( |_\_  |---|   ;  A good programmer is someone who looks
  \  )|  |/ |   |  /    both ways before crossing a one-way street.
   '. |  /_ |   |.'                              - Doug Linder
    '------------'
------------ próxima parte ------------
Se ha borrado un mensaje que no está en formato texto plano...
Nombre     : no disponible
Tipo       : application/pgp-signature
Tamaño     : 189 bytes
Descripción: Digital signature
Url        : https://listas.deusto.es/mailman/private/eside-ghost/attachments/20050705/19a310bf/attachment.bin


Más información sobre la lista de distribución eside-ghost