Russian Qt Forum

Qt => Общие вопросы => Тема начата: timur85 от Апрель 03, 2007, 22:40



Название: Чтение битов из байта (битовые поля)
Отправлено: timur85 от Апрель 03, 2007, 22:40
Прошу срочной помощи! :)
Проблема вот в чем...
С помощью класса QDataStream считываю из двоичного файла
4 байтную величину. но по описанию файла необходимокаждый байт
разложить на биты, чтобыопределить некоторый параметр,
т.е. хххххх1х - одно описание
      хххххх0х - другое.
Слышал что в стандартном C есть битовые поля, есть ли что-то подобное в Qt(может более удобное).
 :D

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

 Да походу возник еще вопрос, как лучше считывать двоичный файл,
с помощью QDataStream (операцией >>) или с помощью метода read
класса QBuffer. Тема просто для меня новая, поэтому буду благодарен любому совету...)))


Название: Чтение битов из байта (битовые поля)
Отправлено: QCasper от Апрель 04, 2007, 00:48
QBitArray?


Название: Чтение битов из байта (битовые поля)
Отправлено: Вудруф от Апрель 04, 2007, 07:23
std::vector <bool>
std::bitset
Ну и просто
if (var & 2)


Название: Чтение битов из байта (битовые поля)
Отправлено: SABROG от Апрель 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
        {
        // третий бит справа не установлен
        }