Russian Qt Forum
Октябрь 02, 2024, 09:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Чтение битов из байта (битовые поля)  (Прочитано 7107 раз)
timur85
Гость
« : Апрель 03, 2007, 22:40 »

Прошу срочной помощи! Улыбающийся
Проблема вот в чем...
С помощью класса QDataStream считываю из двоичного файла
4 байтную величину. но по описанию файла необходимокаждый байт
разложить на биты, чтобыопределить некоторый параметр,
т.е. хххххх1х - одно описание
      хххххх0х - другое.
Слышал что в стандартном C есть битовые поля, есть ли что-то подобное в Qt(может более удобное).
 Веселый

добавлено спустя 5 минут:

 Да походу возник еще вопрос, как лучше считывать двоичный файл,
с помощью QDataStream (операцией >>) или с помощью метода read
класса QBuffer. Тема просто для меня новая, поэтому буду благодарен любому совету...)))
Записан
QCasper
Гость
« Ответ #1 : Апрель 04, 2007, 00:48 »

QBitArray?
Записан
Вудруф
Гость
« Ответ #2 : Апрель 04, 2007, 07:23 »

std::vector <bool>
std::bitset
Ну и просто
if (var & 2)
Записан
SABROG
Гость
« Ответ #3 : Апрель 04, 2007, 07:55 »

Стандартное средство:

Код:

union
{
unsigned char ss;
        struct
        {
        unsigned b0:1;
        unsigned b1:1;
        unsigned b2:1;
        unsigned b3:1;
        unsigned b4:1;
        unsigned b5:1;
        unsigned b6:1;
        unsigned b7:1;
        } byte;
} code;
// Использование
unsigned char ch = 'A';
code.ss = ch;
        if (code.byte.b0)
        {
        // сделать что-то
        }


Но есть вариант покрасивше - логическое умножение (AND/&)

Код:

enum Flags
{
FLAG1 = 0,
FLAG2 = 2;
FLAG3 = 4;
FLAG4 = 8;
FLAG5 = 16;
FLAG6 = 32;
FLAG7 = 64;
FLAG8 = 128;
}
int a = 4; // 00000100b
        if (FLAG3 & a)
        {
        // третий бит справа установлен
        }
        else
        {
        // третий бит справа не установлен
        }
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 20.