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

Gyplex

New Member
17.03.2013
1
0
#1
Нужна логическая помощь:

есть структура 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 бит
как это можно сделать?
 
R

rrrFer

Гость
#2
засунь структуру в енам и в этот же юнион еще одну струкруту с нужными битовыми полями
 
R

rrrFer

Гость
#3
Код:
#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; //! получаем нужные нам поля :)

}