Есть QByteArray, как в него поместить, а потом извлечь битовые поля? Без побитовых сдвигов.
Что-то типа вот этого (по-памяти):
// Допустим 3 бита, второй параметр устанавливает их начальные значения в 0
QBitArray bits(3, false);
a[0] = 1; a[1] = 0; a[2] = 1;
// Буфер в который надо перегнать биты
QByteArray buffer;
// Вспомогательный поток на запись в буфер
QDataStream in(&buffer, QIODevice::WriteOnly);
// Пишем биты в буфер, при помощи потока
in << bits;
Чтение (где-то на другом конце земного шара):
// Читаем буфер с данными при помощи потока
QDataStream out(buffer);
//Битовый массив
QBitArray bits;
//Из буфера, при помощи потока читаем в битовый массив
out >> bits;
Решил сам, но не без помощи сообщества.
Код структуры:
#pragma pack(push, 1) // работает без директив
struct srt_t // размер структуры 160 бит или 20 байт
{
uint8_t one;
uint8_t two;
uint16_t three;
uint32_t four;
uint64_t five;
uint32_t six: 16,
seven: 16;
};
#pragma pack(pop)
Код кодирования структуры в QByteArray:
srt_t ht{ 255, 255, 65535, 4294967295, 9223372036854775807, 65535, 65535 };
QByteArray arr;
arr.append( reinterpret_cast<char *>( &ht ), sizeof( ht ) );
Код декодирования в структуру:
srt_t *pDev1 = reinterpret_cast<srt_t *>( arr.data() );
qDebug() << pDev1->one;
qDebug() << pDev1->two;
qDebug() << pDev1->three;
qDebug() << pDev1->four;
qDebug() << pDev1->five;
qDebug() << pDev1->six;
qDebug() << pDev1->seven;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
При компилировании выдает ошибку Вызвано исключение по адресу 0x77C7F94D (ntdlldll) в test2
Подскажите пожалуйста, по решению вопросаУ меня есть колонка STATE (boolean), добавил колонку NAME (varchar)