[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