C++ Union

noxXx

PC-Selbstbauer(in)
Servus PCGHX-Gemeinde,

ich lese gerade als Vorbereitung auf mein Info-Studium an der Uni Bonn das Buch "Einstieg in C++" von Arnold Willemer (falls das jemand kennt/besitzt). Ich finde das Buch soweit auch gut, nur mit dem Befehl 'union' hab ich gerade ein Problem.

Im Buch (S.152) steht als Beispiel zur Typumwandlung folgendes Listing (ich hoffe dass ich jetzt kein Copyright verletze, hab die Quelle ja angegeben):

union tWandler
{
struct
{
unsigned char hi;
unsigned char lo;
} byte;
unsigned short word;
} Wandler;

int main()
{
Wandler.word = 7656;
cout << int(Wandler.byte.hi) << endl;
cout << int(Wandler.byte.lo) << endl;


Als Erklärung steht über dem Listing, dass der union-Befehl zum tauschen der Bytereihenfolge zwischen verschiedenen Maschinen genutzt wird und unter dem Listing steht, dass als Ergebnis die Werte 232 und 29 ausgegeben werden, was soweit auch stimmt. Sonst gibt es nurnoch den Hinweis, dass der union-Befehl zu Unübersichtlichkeit führt.

Vielleicht gibt es jemand von euch, der mir eben erklären könnte, wie die Werte 232 und 29 zustande kommen? Es wird ja nur dem Element word ein Wert zugewiesen, aber nicht der Struktur oder einer ihrer Elemente und auch keine weiteren Zuweisungen/Berechnungen durchgeführt.

Falls ihr mir helfen könnte, möchte ich mich schonmal bedanken:schief:

MFG noxXx

P.S.: Bei google habe ich nur allgemeine Erklärungen zu dem Befehl gefunden, aber nichts was speziell auf dieses Listing deutet:(
 
Die Struktur byte und die unsigned short int Variable word belegen denselben Speicherbereich. Die Variable word hat eine Länge von 16 Bit besteht aus dem Low Byte und dem High Byte. Wenn man der Variable word den Wert 7656 zuweist (Hexadezimal 0x1DE8), fällt auf das High Byte der Wert 0xE8 = 232 und auf das Low Byte 0x1D = 29.
 
Supder, danke :)

EDIT: hätte den Thread eigentlich doch nicht aufmachen müssen, weiter vorn im Buch steht, dass die Ausgabe sowieso unsinnig ist, wenn man in ein Element schreibt und das andere ausliest:ugly: aber vielleicht hilft der Thread ja auch dem ein oder anderen Programmier-Neuling:daumen:
 
Zuletzt bearbeitet:
Zurück