Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Determiner architecture Intel

15 réponses
Avatar
Alain BARTHE
Bonjour,

Je dois determiner dans un code si je suis en architecture little ou big
endian, pour swapper ou non les octets de certains champs.

Le meme code doit tourner sous Linux sur architecture Intel 32 ou 64
bits, et sous Solaris sur Sparc

J'avais precedemment utilise :

#ifdef __i386
#define HAVE_TO_SWAP_BYTES
#endif

Je suis maintenant passe sur un PC 64 bits et la constante __i386 ne
semble plus definie.

1) Quelle constante utiliser pour quelle marche dans tous les cas,
pour detecter une architecture INTEL (32 ou 64 bits)


2) Y a t-il un moyen plus propre pour savoir si on se trouve en
little ou big endian ?


Je predererais utiliser des #ifdef que faire un test de l'ordre des bits...

5 réponses

1 2
Avatar
JKB
Le Tue, 26 Apr 2011 14:48:57 +0200,
Antoine Leca écrivait :
Marc Espie écrivit :
Bon apres, deja, en passant de __i386 a __BYTE_ORDER, il y a deja un progres,
parce que quid de i386/powerpc/arm/sparc64/longsoon/superH pour ne citer que
quelques archis couramment en usage ces jours-ci ?



<TAQUIN>
D'après http://www.openbsd.org/cgi-bin/man.cgi?query¾toh64, rubrique
BUGS, il n'y a que "vax, alpha, i386, and some mips architectures," qui
diffèrent du reste du monde. :-)
</TAQUIN>


{Et oui, je sais que ce texte vient en droite ligne de la page
byteorder(3) de 4.2BSD, et qu'à l'époque il importait de pouvoir
facilement lire les dumps binaires à l'écran.}



<LINUX>
man endian ?
</LINUX>

J'ai la flemme de redémarrer ma SS20 qui tourne sous NetBSD (et
seulement en 32 bits...)...

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Samuel DEVULDER
Le 26/04/2011 14:56, JKB a écrit :

<LINUX>
man endian ?
</LINUX>

J'ai la flemme de redémarrer ma SS20 qui tourne sous NetBSD (et
seulement en 32 bits...)...




Il faudrait parler du byte-order du PDP-11 (la machine sur laquelle le C
est né): ni little, ni big, mais mélangé! 0xAABBCCDD est ainsi stocké
0xBB 0xAA 0xDD 0xCC (adresses croissantes).

sam.
Avatar
Erwan David
Samuel DEVULDER écrivait :

Le 26/04/2011 14:56, JKB a écrit :

<LINUX>
man endian ?
</LINUX>

J'ai la flemme de redémarrer ma SS20 qui tourne sous NetBSD (et
seulement en 32 bits...)...




Il faudrait parler du byte-order du PDP-11 (la machine sur laquelle le
C est né): ni little, ni big, mais mélangé! 0xAABBCCDD est ainsi
stocké 0xBB 0xAA 0xDD 0xCC (adresses croissantes).



Il me semble qu'il y a un paragraphe sur les byte order au début de la
norme ISO/IEC 20970 (ça défini un format de code Java pour de
l'embarqué). Avec une palanquée de cas...

(purée 142 CHF pour ça...)

--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Avatar
Antoine Leca
Samuel DEVULDER écrivit :
Il faudrait parler du byte-order du PDP-11



Ce n'est pas le PDP-11 (une machine 16-bit petit-boutien, qui ne sait
pas lire ou écrire de valeurs 32 bits en mémoire, exactement comme les
Intel 8086/186/286), mais le coprocesseur FP-11 qui utilise cet ordre
bizarre (67452301 pour les doubles). Le VAX utilise aussi cet ordre pour
les nombres flottants, pour la compatibilité ascendante.

Unix V5 a alors choisi par imitation de stocker les deux morceaux des
entiers 32 bits (time_t puis off_t) dans l'ordre « visuel » des humains,
ce qui a donné l'ordre bizarre "NUXI" pour les entiers 32-bits mais
d'autres systèmes PDP-11 utilisaient l'ordre petit-boutien de manière
cohérente.


Antoine
Avatar
Samuel DEVULDER
Le 27/04/2011 13:12, Antoine Leca a écrit :
Samuel DEVULDER écrivit :
Il faudrait parler du byte-order du PDP-11



Ce n'est pas le PDP-11 (une machine 16-bit petit-boutien, qui ne sait
pas lire ou écrire de valeurs 32 bits en mémoire, exactement comme les
Intel 8086/186/286), mais le coprocesseur FP-11 qui utilise cet ordre
bizarre (67452301 pour les doubles). Le VAX utilise aussi cet ordre pour
les nombres flottants, pour la compatibilité ascendante.



merci pour le complément d'info. Il faudra réparer la wiki à propos du
PDP-11. http://en.wikipedia.org/wiki/Endianness#Middle-endian

sam.
1 2