Битовые Поля (помогите)

Тема в разделе "Общие вопросы по С и С++", создана пользователем Gyplex, 17 мар 2013.

  1. Gyplex

    Gyplex New Member

    Регистрация:
    17 мар 2013
    Сообщения:
    1
    Симпатии:
    0
    Нужна логическая помощь:

    есть структура Typedef struct{
    unsigned char v1_hi:4;
    unsigned char v2_hi:4;
    unsigned char v1;
    unsigned char v2;
    }qqq;

    qqq www;

    www.v1 и www.v1_hi должно формировать одно чило(переменную ) из 12 бит
    как это можно сделать?
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    засунь структуру в енам и в этот же юнион еще одну струкруту с нужными битовыми полями
     
  3. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
    #include <iostream>

    struct SomeStruct { //! твоя структура
    unsigned char
    v1_hi : 4, v2_hi : 4, v1, v2;
    };

    template<unsigned int N, unsigned int M>
    struct SStruct { //! структура с битовыми полями
    //! для извлечения нужной тебе информации
    int a : N;
    int data : M;
    };

    template<unsigned int N, unsigned int M>
    union SUnion { //! объединим твою структуру с дополнительной
    SomeStruct value;
    SStruct<N, M> data;
    };

    int main() {
    SomeStruct s1; //! где то в коде будет объявлен объект твоей структуры
    SUnion<8, 12> data; //! чтобы извлечь нужные данные придеца объявить объект типа
    //! объединения, хотя можно
    //! это завернуть как-нибудь более эротично

    s1.v1 = 'a', s1.v2 = 'o'; //! какие-то произвольные данные

    data.value = s1; //! копируем данные в объединение

    std::cout << data.data.data; //! получаем нужные нам поля :)

    }
     
Загрузка...

Поделиться этой страницей