Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

explication sur big endian et little endian

0 views
Skip to first unread message

dav

unread,
Mar 14, 2002, 12:30:36 PM3/14/02
to
dans certains manuels de programmation il est question de little endian et
big endian. que signifie ces termes et quelle est leur raison d'être dans
l'apprentissage de la programmation en C ?
merci,
dav


Tobias Oed

unread,
Mar 14, 2002, 1:12:16 PM3/14/02
to
dav wrote:

L'endianness (boutiennte selon les membres de l'academie de fclc) n'a rien
a faire avec le C. C'est une issue lie au systeme (proceseur). Si tu ecris
du code normal tu n'as pas en t'en preocuper et c'est bien ainsi car ton
programme est portable.
Laisse moi expliquer quand meme. Prend une machine avec des char d'un octet
(cad qu'il y a 8 bit dans un char, CHAR_BIT=8) et des entiers de deux chars
(16 bit). Si dans la memoire tu as deux octets consecutifs contenant 0x01
et 0x02 et que tu interprete ces deux octets comme un int, selon
l'endianness tu obtiens soit 0x0102 ou 0x0201...

Tobias.

Emmanuel Delahaye

unread,
Mar 14, 2002, 3:56:44 PM3/14/02
to
In 'fr.comp.lang.c', "dav" <manhatta...@wanadoo.fr> wrote in
news:a6qn0e$1l4$1...@wanadoo.fr:

> dans certains manuels de programmation il est question de little endian
> et big endian. que signifie ces termes et quelle est leur raison d'être
> dans l'apprentissage de la programmation en C ?

Aucune raison. C'est un problème d'architecture. Certains micros stockent
les mots de 16 bits avec les bits poids fort à l'adresse basse, d'autres
à l'adresse haute. Pour les objets 32 bits, il y a 4 possibilités... tous
ces détails ne concernent pas le langage C en tant que tel. Par contre, si
on doit échanger des données binaires entre machines, la question peut se
poser.

--
-ed- emdel at noos.fr
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
C-library: http://www.dinkumware.com/htm_cl/index.html
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/

Simon ARNAUD

unread,
Mar 14, 2002, 10:08:22 PM3/14/02
to

Aucune si tu ne fais d'échanges d'entiers (16/32/64 bits), que ce
soit par fichiers, pipes ou sockets. En gros, tant que tu
n'utilises pas ton entier en dehors de ton programme.

Pour mourir moins con, imaginons l'entier 16 bits suivant:
1110101001101110

il est compsé de 2 octets:
l'octet fort: B1 = 11101010
l'octet faible: B0 = 01101110

En big-endian, l'ordinateur représente en mémoire l'entier avec
l'octet de poids fort en premier, donc B1B0. En little-endian,
l'ordinateur représente en mémoire l'entier avec l'octet de poids
faible en premier, donc B0B1.

Donc, si tu stockes un entier dans un fichier, et que tu le
ré-ouvres ensuite, tu dois savoir quelle était sa configuration
en mémoire. Pour le réseau, il existe des fonctions comme htonl
(host to network long) qui te permettent d'oublier ton
architecture quand tu échanges des entiers entre 2 machines.

Encore une fois, pour apprendre le C, c'est pas vital, mais dés
que tu lis/écris dans un fichier, ou que tu échanges des données
entre programmes, cela peut prendre une certaine importance.

--
Simon ARNAUD
aka Maz

0 new messages