• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы 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; //! получаем нужные нам поля :)

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

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