Russian Qt Forum
Июль 30, 2010, 21:55
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
(Модератор:
Sergeich
) >
QBitArray есть вопрос?
Страниц: [
1
]
2
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QBitArray есть вопрос? (Прочитано 1270 раз)
zoro86
Самовар
Offline
Сообщений: 109
QBitArray есть вопрос?
«
:
Март 13, 2010, 08:37 »
Есть более простой способ как загнать HEX код типа 09 или 4B в QBitArray?
картина такова что мне в ответ устройстово выдает один байт, надо перевести в биты и прочесть каждый на различные статусы... соответственно после перевода должно получится 8 бит
Записан
Грызем гранит науки :-)
SABROG
phpBB Житель матрицы
Offline
Сообщений: 1289
Re: QBitArray есть вопрос?
«
Ответ #1 :
Март 13, 2010, 10:04 »
Самый быстрый способ это static_cast из QByteArray в QBitArray. К сожалению об этом не пишут в документации и возможно в будущем могут появится дополнительные члены в QBitArray классе.
Записан
Национальная группа
Russian Federation
на QtCentre.
Qt: 4.6.2 GCC: 4.4.0TDM
We'd get - widget!
zoro86
Самовар
Offline
Сообщений: 109
Re: QBitArray есть вопрос?
«
Ответ #2 :
Март 13, 2010, 12:53 »
SABROG попробовал сделать так QBitArray *bitArray = static_cast<QByteArray *> (&baTmp);
выдает ошибку при компиляции и пишет...
cannot convert 'QByteArray*' to 'QBitArray*' in initialization
Записан
Грызем гранит науки :-)
Павлик
Частый гость
Offline
Сообщений: 228
Re: QBitArray есть вопрос?
«
Ответ #3 :
Март 13, 2010, 13:30 »
zoro86
, static_cast из QByteArray в QBitArray это:
Код
C++ (Qt)
...
QByteArray
*
byteArray
;
...
QBitArray
*
bitArray
=
static_cast
<
QBitArray
*>
(
byteArray
)
;
...
Записан
Qt 4.5 Windows XP Pro SP3 Oracle 9.2.0.8.0
zoro86
Самовар
Offline
Сообщений: 109
Re: QBitArray есть вопрос?
«
Ответ #4 :
Март 13, 2010, 14:34 »
такая же ошибка
Записан
Грызем гранит науки :-)
BRE
Джедай : наставник для всех
Offline
Сообщений: 1988
Re: QBitArray есть вопрос?
«
Ответ #5 :
Март 13, 2010, 15:24 »
Цитата: zoro86 от Март 13, 2010, 14:34
такая же ошибка
Так и должно быть.
static_cast<Type>( val ) это совсем не аналог сишного (Type)val.
Есть определенные правила работы static_cast и в эти правила не входит преобразование из QByteArray в QBitArray.
Почитай про static_cast побольше.
Записан
den'ka
Самовар
Offline
Сообщений: 179
Re: QBitArray есть вопрос?
«
Ответ #6 :
Март 13, 2010, 16:40 »
Цитата: zoro86 от Март 13, 2010, 08:37
Есть более простой способ как загнать HEX код типа 09 или 4B в QBitArray?
картина такова что мне в ответ устройстово выдает один байт, надо перевести в биты и прочесть каждый на различные статусы... соответственно после перевода должно получится 8 бит
А возможностей самого языка разве для этого мало? Зачем тут огород из классов?
Записан
What's done cannot be undone
Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Igors
phpBB Супер
Offline
Сообщений: 1124
Re: QBitArray есть вопрос?
«
Ответ #7 :
Март 13, 2010, 17:09 »
Цитата: BRE от Март 13, 2010, 15:24
Почитай про static_cast побольше.
Почитай что/где? Стандарт? Там не так уж легко разобраться
Вот напр. доступное изложение
http://alenacpp.blogspot.com/2005/08/c.html
Цитировать
static_cast между указателями корректно, только если один из указателей - это указатель на void или если это приведение между объектами классов, где один класс является наследником другого.
Привести через указатель - вероятно будет все Ok, по данным оба выглядят одинаково. Но это нелегальщина. Я бы вообще обошелся без QBitAtay, сделав пару-тройку ф-ций
Код:
inline bool GetBit( const QByteArray & a, int bitIndex )
{
return a[bitIndex / 8] & (1 << (bitIndex % 8)) != 0;
}
inline void SetBit( QByteArray & a, int bitIndex )
{
a[bitIndex / 8] |= (1 << (bitIndex % 8));
}
inline void ClrBit( QByteArray & a, int bitIndex )
{
a[bitIndex / 8] &= ~(1 << (bitIndex % 8));
}
inline void SetBit( QByteArray & a, int bitIndex, bool doSet )
{
if (doSet) SetBit(a, bitIndex);
else ClrBit(a, bitIndex);
}
Записан
BRE
Джедай : наставник для всех
Offline
Сообщений: 1988
Re: QBitArray есть вопрос?
«
Ответ #8 :
Март 13, 2010, 17:48 »
Цитата: Igors от Март 13, 2010, 17:09
Почитай что/где? Стандарт? Там не так уж легко разобраться
Почему стандарт? Не обязательно стандарт, но можно и его....
А так есть книги, статьи и куча заметок в инете.
Достаточно в google набрать это слово.
Цитата: Igors от Март 13, 2010, 17:09
Вот напр. доступное изложение
http://alenacpp.blogspot.com/2005/08/c.html
Вот-вот.
Цитата: Igors от Март 13, 2010, 17:09
Я бы вообще обошелся без QBitAtay, сделав пару-тройку ф-ций
или посмотреть на QFlags.
«
Последнее редактирование: Март 13, 2010, 18:02 от BRE
»
Записан
SABROG
phpBB Житель матрицы
Offline
Сообщений: 1289
Re: QBitArray есть вопрос?
«
Ответ #9 :
Март 14, 2010, 04:27 »
Если глянуть исходники, то там еще публичный указатель есть на QByteArray. Можно вообще без приведения типов работать. static_cast не работает скорее всего потому, что QBitArray не наследует QByteArray, а использует аггрегацию. Тогда наверно все-таки reinterpret_cast.
Записан
Национальная группа
Russian Federation
на QtCentre.
Qt: 4.6.2 GCC: 4.4.0TDM
We'd get - widget!
zoro86
Самовар
Offline
Сообщений: 109
Re: QBitArray есть вопрос?
«
Ответ #10 :
Март 15, 2010, 07:49 »
ну в общем поюзал там и тут получилась так..
void AV268Acceptor::dec_to_bin(const int decimal)
{
int remainder;
if(decimal <= 1) {
result_bits[count_bit] = decimal;
count_bit --;
return;
}
remainder = decimal%2;
result_bits[count_bit] = remainder;
count_bit --;
dec_to_bin(decimal >> 1);
return;
}
void AV268Acceptor::bits(const int decimal)
{
count_bit = 7;
dec_to_bin(decimal);
qDebug() << result_bits[0];
qDebug() << result_bits[1];
qDebug() << result_bits[2];
qDebug() << result_bits[3];
qDebug() << result_bits[4];
qDebug() << result_bits[5];
qDebug() << result_bits[6];
qDebug() << result_bits[7];
}
{
...
unsigned char ff = 0x1B;
int aa = ff;
bits(aa);
...
}
где int count_bit; QBitArray result_bits; public переменные...
если есть идеи как можно по другому, к примеру проста считать 3-bit из byta=0x1B пишите...
Записан
Грызем гранит науки :-)
kuzulis
Птица говорун
Offline
Сообщений: 901
Re: QBitArray есть вопрос?
«
Ответ #11 :
Март 15, 2010, 08:56 »
А не проще ли маскированием выделять нужные биты нежели юзать бит-аррай ?
И причем тут hex код?
Записан
ArchLinux x86_64 / WinXP SP3
p166
Новичок
Offline
Сообщений: 24
Re: QBitArray есть вопрос?
«
Ответ #12 :
Март 15, 2010, 22:06 »
Ребята! Юзайте битовые маски! Зачем велосипед изобретать? Столько кода лишнего.... жесть...
Записан
zoro86
Самовар
Offline
Сообщений: 109
Re: QBitArray есть вопрос?
«
Ответ #13 :
Март 16, 2010, 06:29 »
Скинте пример... или сылку, я таким еще не пользовался..
Записан
Грызем гранит науки :-)
voronElf
Самовар
Offline
Сообщений: 142
Re: QBitArray есть вопрос?
«
Ответ #14 :
Март 16, 2010, 10:07 »
Например:
Код:
#define MASK_1 0x02
char bytes = .... //получение байта
if(bytes & MASK_1) {
... //первый бит установлен в 1 (нумерация битов с нуля начинается справал налево)
};
Почитай про битовые операции в С
Записан
Ищи пазитифф !!!
Страниц: [
1
]
2
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Пользовательский интерфейс (GUI)
=> Model-View-Controller (MVC)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование
=> Мультимедиа
=> 2D и 3D графика
=> Интернационализация, локализация
=> XML
=> Печать
=> Qt Script
=> ActiveX
=> Установка, сборка, отладка, тестирование
=> Qt Embedded
=> Дополнительные компоненты
=> Вклад сообщества в Qt
=> Qt-инструментарий
=> Общие вопросы
=> Уроки и статьи
=> Вопросы новичков
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
=> Архив
===> Программирование
=====> Мультимедия
=====> Python
=====> Delphi
=====> GTK
=====> Другие GUI библиотеки
===> Веб программирование
=====> PHP, PERL, CGI
=====> JavaScript
=====> WebDesign and all
Загружается...