Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Alexey_Bulatov от Октябрь 29, 2018, 16:30



Название: несколько int в массив bool побитово.
Отправлено: Alexey_Bulatov от Октябрь 29, 2018, 16:30
Товарищи, есть задачка, как решить большим кол-вом строк знаю, но хочу как-то компактно.

есть 3 переменных типа int;
есть массив bool на 48 элементов;

надо взять от каждого инта по 16 первых бит и записать их в массив булов.

хелп)


Название: Re: несколько int в массив bool побитово.
Отправлено: Igors от Октябрь 29, 2018, 17:36
Код
C++ (Qt)
void ThreeInt2Bool( const int src[3], bool dst[48] )
{
 int pos = 0;
 for (int i = 0; i < 3; ++i)
  for (int j = 0; j < 16; ++j)
   dst[pos++] = (src[i] >> j) & 1;
}


Название: Re: несколько int в массив bool побитово.
Отправлено: sergek от Октябрь 29, 2018, 17:41
Одна строка лишняя)))


Название: Re: несколько int в массив bool побитово.
Отправлено: Alexey_Bulatov от Октябрь 30, 2018, 08:33
Благодарю!


Название: Re: несколько int в массив bool побитово.
Отправлено: deMax от Октябрь 30, 2018, 09:19
Одна строка лишняя)))
Две, одного "for" и "memcpy" хватит.


Название: Re: несколько int в массив bool побитово.
Отправлено: Igors от Октябрь 30, 2018, 09:23
Одна строка лишняя)))
Две, одного "for" и "memcpy" хватит.
Прошу исполнить  :)


Название: Re: несколько int в массив bool побитово.
Отправлено: deMax от Октябрь 30, 2018, 10:51
memcpy не прокатит для bool[48], так как он  занимает 48 байт. Мой способ на другом типе(у автора тип массива не указан).

Код:
QByteArray ba;
QList<int> ia = {0x00FFFF0F, 0x00FF0000, 0x00FFFF00};

for(int i=0; i < 3; ++i) {
    ba.append(ia[i] & 0x00FF).append((ia[i] >> 8) & 0xFF);

Хотя тут QBitArray нужен для массива.


Название: Re: несколько int в массив bool побитово.
Отправлено: sergek от Октябрь 30, 2018, 11:09
Не так, не? ))

Код
C++ (Qt)
void ThreeInt2Bool( const int src[3], bool dst[48] )
{
 for (int i = 0; i < 48; ++i)
   dst[i] = (src[i/16] >> (i%16)) & 1;
}


Название: Re: несколько int в массив bool побитово.
Отправлено: deMax от Октябрь 30, 2018, 11:15
QBitArray bita(48);
QList<int> ia = {0x00FFFF0F, 0x00FF0000, 0x00FFFF00};
uint16_t *pBit = (uint16_t*)bita.data_ptr()->data();
for(int i=0; i < 3; ++i)
    pBit = ia & 0xFFFF;

Не так, не? ))
i/16 и i%16, жирные операции, но компилятор это исправит.


Название: Re: несколько int в массив bool побитово.
Отправлено: Alexey_Bulatov от Октябрь 30, 2018, 16:23
да, именно bool[48] на 48 байт у меня.


Название: Re: несколько int в массив bool побитово.
Отправлено: __Heaven__ от Октябрь 30, 2018, 22:07
Компилетайм биты! :)

Код
C++ (Qt)
constexpr bitset<48> bits(uint16_t i1, uint16_t i2, uint16_t i3) {
   return {uint64_t(i1) << 32 | uint64_t(i2) << 16 | i3};
}
 

https://ideone.com/5No9tm