lundi 29 juin 2015

Why wrap a struct with a union?


I saw a code snippet from a good answer for Is it possible to insert three numbers into 2 bytes variable?

For example, I want to store date which contain days, months, years.

  • days -> 31, months -> 12, years -> 99.

I want to store 31, 12, 99 in one variable, and will use shift operators << and >> to manipulate it.

//Quoted: the C code from that answer
    union mydate_struct {
        struct {
            uint16_t day : 5;    // 0 - 31
            uint16_t month : 4;  // 0 - 12
            uint16_t year : 7;   // 0 - 127
        };
        uint16_t date_field;
    };

Now, my question is to why wrap the struct with a union? What are the special concerns?

Because if it is just to use struct, it seems more direct and simple to use:

   typedef struct {
        uint16_t day : 5;    // 0 - 31
        uint16_t month : 4;  // 0 - 12
        uint16_t year : 7;   // 0 - 127
   } mydate_struct;


Aucun commentaire:

Enregistrer un commentaire