little endian/big endian
Le
Alexandre BACQUART
Y'a-t-il un define standard (ou disons, "relativement portable")
permettant de savoir si l'architecture est big ou little endian ?
Je pourrais faire un truc du genre :
typedef unsigned short int u16;
switch(*(u16*)"\0\1")
{
case 0x0001:
/* big */
break;
case 0x0100:
/* little */
break;
default:
/* what the hell is this ? */
}
ou peut-être mieux :
int v = 1;
bool bigendian = (*(unsigned char*)(&v) == 0) ? true : false;
mais une constante preprocess serait quand-même meilleure pour ce genre
de choses, non ?
--
Tek
permettant de savoir si l'architecture est big ou little endian ?
Je pourrais faire un truc du genre :
typedef unsigned short int u16;
switch(*(u16*)"\0\1")
{
case 0x0001:
/* big */
break;
case 0x0100:
/* little */
break;
default:
/* what the hell is this ? */
}
ou peut-être mieux :
int v = 1;
bool bigendian = (*(unsigned char*)(&v) == 0) ? true : false;
mais une constante preprocess serait quand-même meilleure pour ce genre
de choses, non ?
--
Tek

Poser une question


Dans quel but ? Si tu désires savoir si ta machine est
petit ou gros boutiste, ton code doit être une piste de
solution (sauf que, dans mon souvenir, la distinction
gros/petit boutiste n'est suffisante que pour une donnée
sur 2 char, dès qu'on en a 4, on a les rangements suivant
possibles
|3|2|1|0|
|2|3|0|1|
|0|1|2|3|
)
Si ton but c'est de pouvoir communiquer entre machines
sans te soucier du codage interne, beaucoup de machines
offrent les fonctions
uint32_t htonl (uint32_t hostlong);
uint16_t htons (uint16_t hostshort);
uint32_t ntohl (uint32_t netlong);
uint16_t ntohs (uint16_t netshort);
qui permettent de s'envoyer des données entières non signées
16 et 32 bits sans se soucier de leur représentation.
Ca ne répond pas à ta question mais ça résoud peut-être le
problème à l'origine de la question.
Marc Boyer
--
La contractualisation de la recherche, c'est me donner de l'argent pour
faire ce que je ne sais pas faire, que je fais donc mal, pendant que ce
que je sais faire, je le fais sans moyens...
Avec gcc, tu devrais trouver ton bonheur dans /usr/include/endian.h
Je sais pas si c'est portable...
Certainement pas, mais ça me va, merci :)
--
Tek