Search code examples
ccastingstruct

Casting struct into int


Is there a clean way of casting a struct into an uint64_t or any other int, given that struct in <= to the sizeof int? The only thing I can think of is only an 'ok' solution - to use unions. However I have never been fond of them.

Let me add a code snippet to clarify:

typedef struct {
uint8_t field: 5;
uint8_t field2: 4;
/* and so on... */
}some_struct_t;

some_struct_t some_struct;
//init struct here

uint32_t register;

Now how do i cast some_struct to capture its bits order in uint32_t register.

Hope that makes it a bit clearer.


Solution

  • I've just hit the same problem, and I solved it with a union like this:

    typedef union {
        struct {
            uint8_t field: 5;
            uint8_t field2: 4;
            /* and so on... */
        } fields;
        uint32_t bits;
    } some_struct_t;
    
    /* cast from uint32_t x */
    some_struct_t mystruct = { .bits = x };
    
    /* cast to uint32_t */
    uint32_t x = mystruct.bits;
    

    HTH, Alex