Search code examples
cbit-fields

Converting Bit Field to int


I have bit field declared this way:

typedef struct morder {
    unsigned int targetRegister : 3;
    unsigned int targetMethodOfAddressing : 3;
    unsigned int originRegister : 3;
    unsigned int originMethodOfAddressing : 3;
    unsigned int oCode : 4;
} bitset;

I also have int array, and I want to get int value from this array, that represents the actual value of this bit field (which is actually some kind of machine word that I have the parts of it, and I want the int representation of the whole word).


Solution

  • You can use a union:

    typedef union bitsetConvertor {
        bitset bs;
        uint16_t i;
    } bitsetConvertor;
    
    bitsetConvertor convertor;
    convertor.i = myInt;
    bitset bs = convertor.bs;
    

    Or you can use a cast:

    bitset bs = *(bitset *)&myInt;
    

    Or you can use an anonymous struct within a union:

    typedef union morder {
        struct {
            unsigned int targetRegister : 3;
            unsigned int targetMethodOfAddressing : 3;
            unsigned int originRegister : 3;
            unsigned int originMethodOfAddressing : 3;
            unsigned int oCode : 4;
        };
    
        uint16_t intRepresentation;
    } bitset;
    
    bitset bs;
    bs.intRepresentation = myInt;