Maison >développement back-end >C++ >Comment puis-je déterminer par programme l'endianité en C ?

Comment puis-je déterminer par programme l'endianité en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-25 11:22:16824parcourir

How Can I Programmatically Determine Endianness in C  ?

Détection par programmation de l'endianité en C

L'endianité, une propriété qui indique l'ordre des octets dans une structure de données, est cruciale pour l'architecture croisée compatibilité des codes. En C , il existe une méthode pour détecter le caractère boutien par programmation sans compilation conditionnelle.

Pour comprendre cette méthode, nous approfondissons le concept d'unions. Une union en C combine plusieurs types de données en une seule structure, où ils partagent le même espace mémoire. En utilisant une union, nous pouvons accéder aux mêmes données dans différents formats de données, offrant ainsi une solution intelligente pour détecter le caractère boutiste.

Considérez l'extrait de code suivant :

bool is_big_endian(void) {
    union {
        uint32_t i;
        char c[4];
    } bint = { 0x01020304 };

    return bint.c[0] == 1;
}

Dans ce code, nous définissez une union avec un entier de 32 bits (uint32_t) nommé i et un tableau de quatre caractères nommé c. On initialise l'union avec la valeur 0x01020304, où l'octet de poids fort est 0x01.

Si le système est big-endian, l'octet de poids fort sera stocké dans le premier octet du tableau c, faisant bint. c[0] égal à 1. En revanche, si le système est petit-boutiste, l'octet de poids faible sera stocké dans le premier octet de c, ce qui donnera bint.c[0] étant égal à 4.

En comparant bint.c[0] avec 1, on peut déterminer le caractère boutien du système. Cette méthode est efficace et évite l’utilisation du jeu de mots de type, qui peut générer des avertissements du compilateur. De plus, il adhère aux normes C99 et est compatible avec les systèmes d'exploitation prenant en charge plusieurs architectures.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn