GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 3 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Marc Boyer
Le #630428
Alexandre BACQUART wrote:
Y'a-t-il un define standard (ou disons, "relativement portable")
permettant de savoir si l'architecture est big ou little endian ?


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...

gpg
Le #629817
Alexandre BACQUART wrote:


Y'a-t-il un define standard (ou disons, "relativement portable")
permettant de savoir si l'architecture est big ou little endian ?



Avec gcc, tu devrais trouver ton bonheur dans /usr/include/endian.h
Je sais pas si c'est portable...

Alexandre BACQUART
Le #638045
gpg wrote:
Alexandre BACQUART wrote:

Y'a-t-il un define standard (ou disons, "relativement portable")
permettant de savoir si l'architecture est big ou little endian ?


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


Publicité
Suivre les réponses
Poster une réponse
Anonyme