С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Маска байта - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить минимальный среди элементов побочной диагонали матрицы http://www.cyberforum.ru/cpp-beginners/thread609997.html
помогите пожалуйста написать программу Дана целочисленная квадратная матрица. Определить минимальный среди элементов побочной диагонали. Для ввода, вывода и обработки матрицы использовать функции.
C++ Помоги разобравться с нескольками прогами Объясните, какие действия выполняет каждая строка в 6 программах. №1. .... int add(int n, int m) {return n + m;} int divi(int n, int m) {return n / m;} int mult(int n, int m) {return n * m;}... http://www.cyberforum.ru/cpp-beginners/thread609991.html
Работа с файлами C++
Напишите пожалуйста программу ( с комментариями по возможности ) Информация об участниках спортивных соревнований содержит: - Ф.И.О. игрока; - игровой номер; - возраст; - рост; - вес;...
C++ Определить среднюю массу мальчиков и средний рост девочек
Напишите пожалуйста программу(с комментариями по возможности): "По данным сведениям об учениках класса определить среднюю массу мальчиков и средний рост девочек. Кто из учеников класса самый...
C++ Попадает ли точка с заданными координатами в полукруг http://www.cyberforum.ru/cpp-beginners/thread609977.html
Определить, попадает ли точка с заданными координатами в полукруг радиусом R, расположенный в I и II четверти. (Уравнение окружности R2=x2+y2.).
C++ operator= Такой вопрос. Есть объект. Хочу чтобы при присваивании его к чеслу выдавалось число. Например. class MyClass { short MyClass::operator=(const MyClass&My) {return 12;}; }; Main() { подробнее

Показать сообщение отдельно
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567

Маска байта - C++

20.06.2012, 16:13. Просмотров 3666. Ответов 13
Метки (Все метки)

Есть переменная uint8_t, например,
C++
1
uint8_t red;
, маска uint32_t, например,
C++
1
uint32_t RedMask;
, нетипизированный указатель, например,
C++
1
void *p;
и переменная типа uint8_t, хранящая фактический размер данных по указателю в битах и равная 16, 24, или 32, например,
C++
1
uint8_t BitPerixel
. Требуется взять данные по указателю и с учётом маски скопировать не более восьми бит в переменную red. Если в маске установлены больше 8-ми бит, лишние младшие биты отбросить и просто не копировать в red, а скопировать 8 старших, если же в маске установлено меньше восьми бит, не достающие младшие биты переменной red обнулить. Перед копированием требуется проверить маску на "дырявость", то есть встречаются ли в ней ноли между единицами, в этом случае копировать ничего не надо, а следует вернуть false.

Добавлено через 1 час 29 минут
Например, RedMask=0x07C00000, BitPerPixel=32, по указателю p валяется цвет 0x5EF55ED3, надо получить 0xB8. Если RedMask=0x00FF0000, по указателю p валяется тот же цвет 0x5EF55ED3, то надо получить 0xF5. А если RedMask=FFC00000, по указателю p валяется всё тот же цвет 0x5EF55ED3, то надо получить 0x5E.

Добавлено через 1 минуту
И ещё надо проверить, не вылезают ли единицы в маске за отведённую длину.

Добавлено через 4 минуты
Битовые операции я знаю. Но надо ещё измерить величину сдвига. Как это лучше сделать?

Добавлено через 2 часа 27 минут
32-х битная “маска” считается действительной, если ее двоичное представление содержит непрерывный ряд “1″ и следующий за ним ряд “0″.
, вот только по дефолту нет ни какой гарантии валидности маски, надо сделать проверку такой вилидности.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.