• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

  • Автор темы Gyplex
  • Дата начала
G

Gyplex

Нужна логическая помощь:

есть структура 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

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

rrrFer

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

}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!