Bases de la programmation en C
union { uint32_t w; uint8_t b[4]; } u;
u.w = 0x12345678;
printf("%02X %02X\n", u.b[0], u.b[1]);uint32_t et uint8_t sont des types entiers non signés de 32 bits et de 8 bits, et l'environnement est petit-boutiste (little-endian). Quelle est la sortie obtenue en exécutant le code ci-dessus ?
- A12 34
- B78 56
- C87 65
Afficher la réponse et l'explication
Réponse : B. 78 56
Les membres d'une union se superposent à partir de la même adresse : u.b[0] à u.b[3] représentent chacun l'un des 4 octets de u.w. En petit-boutiste, l'octet de poids faible est placé à l'adresse la plus basse : 0x12345678 est donc rangé dans l'ordre 78, 56, 34, 12 à partir de l'adresse la plus basse. u.b[0] vaut ainsi 0x78 et u.b[1] vaut 0x56. Lire un membre autre que celui qui a été écrit permet ainsi d'examiner l'ordre des octets, mais le résultat dépend de l'endianness.
Continuer : 9 autres questions sur Bases de la programmation en C