2015-10-06 2 views
0

Это может быть немного странно, но это проблема, с которой я сталкиваюсь.Установка значения int как конкретного бита

У меня есть-структуру, как это:

typedef struct smallStruct{ 
    unsigned int First10 : 10; 
    unsigned int Next10 : 10; 
    unsigned int Third10 : 10; 
    unsigned int extra : 1; 
} small 

Мне нужно, чтобы иметь возможность передавать в междунар и установите его так, чтобы он помещается внутрь того, что 10 бит для First10, то другой Int для Next10 и т.д. Причина этого в том, что я должен иметь возможность хранить 4 разных фрагмента информации внутри 4 байтовой переменной, и это самый эффективный способ, я могу думать об этом.

Нужно ли мне для этого переводить бит?

+1

Да, для этого вам нужно выполнить смещение бит. – Nayuki

+0

Что означает «прохождение в« int »? Вы имеете в виду как параметр функции? –

+2

Bitfield-struct не гарантирует упаковку, и это не гарантирует определенный макет. Если вам нужна 32-битная переменная, используйте' uin32_t' и бит-ops. – Olaf

ответ

2

Вы можете просто присвоить значения; логика битового поля выполняет необходимые изменения:

small make_small(int a, int b, int c) { 
    small result = { a, b, c, 0 }; 
    return result; 
} 

void update_first(int value, small * s) { 
    s->First10 = value; 
} 

// etc. 
Смежные вопросы