C'è un trucco per scomporli.
L'invenzione probabilmente risalve a San R. W. Stevens, ma l'attribuzione è incerta :-), in ogni caso eccotela:
codice:
#include <stdio.h>
int main ()
{
union {
short s;
char c [ sizeof(short) ];
} u;
u.s = 0x0102;
if (sizeof(short) == 2)
{
if (u.c[0]==0x01 && u.c[1]==0x02)
puts ("big-endian");
else if (u.c[0]==0x02 && u.c[1]==0x01)
puts ("little-endian");
else
puts ("unknownn");
}
else
printf ("can't perform my duty: sizeof(short) = %d != 2\n", sizeof(short));
return 0;
}
Il trucco sta nell'usare il costrutto union per operare una vista su un dato: nel tuo caso basta che dichiari
codice:
union {
double s;
char c [ sizeof(double) ];
} u;
In ogni caso lo scopo di questa funzione è determinare se una macchina è little endian o big endian e non è modificare un dato in modo così "sporco".
Oregon ha ragione su tutta la linea.
Ciao!