Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [qt] Работа с QBitArray 
:(
    Опции темы
gordmiand
Дата 23.6.2011, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



У меня есть char-переменная cword – как мне узнать значение каждого его разряда (бита)? Знаю, что это можно сделать с использованием объединения битового поля с нужной переменной (здесь - типа char):
Код

union Bits
{
   struct
    {
     unsigned short bit1: 1
     unsigned short bit2: 1;
     unsigned short bit3: 1;
     unsigned short bit4: 1;
     unsigned short bit5: 1;
     unsigned short bit6: 1;
     unsigned short bit7: 1;
     unsigned short bit8: 1;
    };
   char cword;
} oBits;

oBits.cword=…;// задаю значение
qDebug() << oBits.bit1 << oBits.bit2 … // вывод значений разрядов переменной cword

Но уж коли я использую Qt, то хотелось бы решить эту задачку с использованием его классов, а именно QBitArray (вместо битового поля) – но каким образом этот QBitArray наиболее простым способом “поставить в соответствие” переменной cword? Ведь QBitArray не запихивается (?) в объединение:
Код

union Bits
{
   QBitArray word_bits(8);
   char cword;
} oBits;
//error: expected identifier before numeric constant
//error: expected ',' or '...' before numeric constant


PM MAIL   Вверх
alexvs11
Дата 23.6.2011, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 2
Всего: 10



а че 
Код

int main()
{
  char a = 15;
  int n = 4;
  printf( "%d\n", a & (1 << n) ? 1 : 0 );
  return 0;
}

уже не катит? smile 
кроме того есть std::bitset

Добавлено через 4 минуты и 32 секунды
а вообще же operator[](int i)
PM MAIL   Вверх
gordmiand
Дата 24.6.2011, 05:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



нет, сдвигами мне "не катит" - надо сделать с помощью QBitArray...
PM MAIL   Вверх
alexvs11
Дата 24.6.2011, 05:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 2
Всего: 10



так квадратные скобки есть
PM MAIL   Вверх
borisbn
Дата 24.6.2011, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



gordmiand, если я тебя правильно понял (имея байт как-то "положить" его целиком на QByteArray или bitset) - то нет. не получится. придётся заполнять каждый бит в отдельности.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
pilotnet
Дата 24.6.2011, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 22.4.2008

Репутация: нет
Всего: нет



QDataStream & operator>> ( QDataStream & in, QBitArray & ba )
Reads a bit array into ba from stream in.
PM MAIL   Вверх
borisbn
Дата 24.6.2011, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



pilotnet, и что, вот так будет работать ?
Код

QByteArray ba;
QDataStream ss( &ba, QIODevice::ReadOnly | QIODevice::WriteOnly );
unsigned char byte = 42;
ss << byte;
QBitArray bits;
ss >> bits;

чот сомневаюсь. щаз проверю

Добавлено через 8 минут и 43 секунды
неа. не работает

Это сообщение отредактировал(а) borisbn - 24.6.2011, 13:35


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
alexvs11
Дата 24.6.2011, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 2
Всего: 10



Цитата(borisbn @  24.6.2011,  13:27 Найти цитируемый пост)
неа. не работает

тож сегодня пробовал - не работает, хотя в примерах чето подобное есть
я все же за bitset
PM MAIL   Вверх
borisbn
Дата 24.6.2011, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



> я все же за bitset
Я - двумя руками, если бы там это можно было бы сделать. Но там тоже облом


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
alexvs11
Дата 24.6.2011, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 2
Всего: 10



borisbn, 
Код

#include <bitset>

int main()
{
  std::bitset<8 * sizeof(int)> bit(195);

  for( int i=bit.size()-1;i>=0;--i )
  {
    std::cout << ( bit.test(i) ? 1 : 0 ) << " ";
  }
}


http://codepad.org/AmWazMlh smile 
PM MAIL   Вверх
borisbn
Дата 24.6.2011, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



alexvs11, ога, забыл. в своё оправдание скажу, что макс. можно sizeof( unsigned long ) * 8 штук бит инициализировать smile


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.