Grundlagen der Programmiersprache 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 sei ein vorzeichenloser 32-Bit- und uint8_t ein vorzeichenloser 8-Bit-Ganzzahltyp, und die Umgebung sei Little-Endian. Welche Ausgabe erzeugt der obige Code bei der Ausführung?
- A12 34
- B78 56
- C87 65
Antwort und Erläuterung anzeigen
Antwort: B. 78 56
Die Member einer Union liegen überlappend ab derselben Adresse, daher stellen u.b[0] bis u.b[3] jeweils eines der 4 Byte von u.w dar. Bei Little-Endian liegt das niederwertigste Byte an der kleinsten Adresse, daher wird 0x12345678 ab der kleinsten Adresse in der Reihenfolge 78, 56, 34, 12 abgelegt. u.b[0] ist also 0x78 und u.b[1] 0x56. Das Lesen über einen anderen Member als den beschriebenen eignet sich so zum Untersuchen der Bytereihenfolge, das Ergebnis hängt aber von der Endianness ab.
Weiter: 9 weitere Fragen zu Grundlagen der Programmiersprache C