Ho una progettazione che richiede che i valori siano contenuti in determinati bit all'interno di una parola a 32 bit. L'esempio dei bit 10-15 deve contenere il valore 9, con tutti i bit rimanenti pari a 0. Quindi, per semplicità/leggibilità, ho creato una struttura che contiene una versione suddivisa di ciò che viene richiesto.Digitare struct to integer C++
struct {
int part1 : 10;
int part2 : 6;
int part3 : 16;
} word;
posso quindi impostare part2
ad essere uguale a qualsiasi valore è richiesto, e impostare le altre parti come 0.
word.part1 = 0;
word.part2 = 9;
word.part3 = 0;
Ora voglio prendere quella struct, e convertirlo in un unico Numero intero a 32 bit. Lo faccio compilando forzando il casting, ma non sembra un modo molto elegante o sicuro di convertire i dati.
int x = *reinterpret_cast<int*>(&word);
Se provo a lanciarlo proprio come un normale reinterpret_cast<int>(word)
ottengo il seguente errore:
invalid cast from type 'ClassName::<anonymous struct>' to type 'int'
Ci deve essere un modo migliore di fare questo, non riesco proprio a capirlo. Grazie in anticipo!
Nota: deve essere fatto in C++ fusione stile, a causa delle norme e quant'altro ... occhio rotolo
Sì, ora che non lavoro più per IBM, userei solo un sindacato. (Non si può menzionare la parola U in IBM, lo sai). –
Nota che non è definito dove quei bitfield si trovano all'interno di 'int', ma solo il numero di bit che essi prendono. –
@HotLicks Sì, non è IBM, ma è sicuramente un luogo che ha una vista simile :) – MZimmerman6