Connaître la façon dont l'ordinateur stocke les données.

Little endian ou big endian?

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je suis en train de lire un livre sur le fonctionnement des ordinateurs, et l’un des exercices demande d’écrire une fonction qui vérifie si l’ordinateur est oui ou non en "little endian". De plus, cette fonction doit fonctionner sur n’importe quelle machine, quelle que soit la taille du mot(ça se dit comme ça?).

J’ai écris la mienne, mais je ne suis pas sûr qu’elle fonctionne pour toute taille de mot, et j’aimerai avoir votre avis :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>

typedef unsigned char *byte_pointer;

int is_little_endian(void);

int main()
{
    printf("%d", is_little_endian());
    return 0;
}

int is_little_endian(void){
    byte_pointer bp;
    unsigned int real_value = 0x1234;
    bp = (byte_pointer) &real_value;
    if(*bp == 0x34)
        return 1;
    return 0;
}

Merci d’avance.

Salut,

Le terme de « mot » peut désigner plusieurs choses et est devenu un peu vague au fil du temps. Dans le cas de ton livre, il veut certainement faire référence à la taille maximale des registres entiers hors cas particuliers. En C, cette taille est le plus souvent traduite par le type int, mais ce n’est pas nécessairement vrai (par exemple un int sur une architecture 64 bits courante fait le plus souvent 32 bits). À vrai dire, le type intmax_t introduit en C99 est probablement plus proche de ce concept de « mot ».

Sinon, oui, ton code fonctionnera sur les architectures courantes sauf cas atypiques (middle endian ou bits de bourrage). ;)

Édit: note que le boutisme est abordé dans ce chapitre du tuto C.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte