Mam projekt, który wymaga wartości zawartych w niektórych bitach wewnątrz 32-bitowego słowa. Przykład bity 10-15 musi zawierać wartość 9, a pozostałe bity to 0. Dla uproszczenia/czytelności utworzyłem strukturę, która zawiera zepsutą wersję tego, co jest zadawane.Wpisz casting struct na liczbę całkowitą C++
struct {
int part1 : 10;
int part2 : 6;
int part3 : 16;
} word;
mogę następnie ustawić part2
być równa co wartość jest wymagana, i ustawić inne części jako 0.
word.part1 = 0;
word.part2 = 9;
word.part3 = 0;
I teraz chce podjąć tego struct i przekształcić go w pojedynczym 32-bitowa liczba całkowita. Mam to skompilowanie przez wymuszenie odlewania, ale nie wydaje się to bardzo eleganckim lub bezpiecznym sposobem konwertowania danych.
int x = *reinterpret_cast<int*>(&word);
Gdy próbuję rzucić go tak, jak normalny reinterpret_cast<int>(word)
pojawia się następujący błąd:
invalid cast from type 'ClassName::<anonymous struct>' to type 'int'
Musi istnieć lepszy sposób to zrobić, po prostu nie mogę zrozumieć. Z góry dziękuję!
Uwaga: Musi być wykonane w języku C++ odlewania stylu, ponieważ standardy i etażerka ... oko rolka
Tak, teraz, gdy już nie pracuję dla IBM, po prostu użyję związku. (Nie można wspomnieć o słowie U w IBM, wiesz.) –
Należy zauważyć, że nie jest zdefiniowane, gdzie te pola bitowe znajdują się wewnątrz 'int', tylko liczba bitów, które biorą. –
@HotLicks Tak, to nie jest IBM, ale zdecydowanie miejsce, które ma podobne poglądy :) – MZimmerman6