Название: Байты в Биты и обратно Отправлено: Kate от Октябрь 20, 2016, 08:52 Не могу разобраться,использую две функции
1.Перевод из байтовой последовательности в битовую 2.Перевод из битовой в байтовую Для теста строка '1234' и 'data' Не получается обратного соответствия. Листинг: Код: QBitArray Test::convertBytesToBits(QByteArray fromArray) Название: Re: Байты в Биты и обратно Отправлено: Igors от Октябрь 20, 2016, 10:20 Уважаемые новички
Будьте добры пользоваться тегом для оформления кода. Может чего бы и ответил, но глаза ломать не хочу Спасибо за понимание Название: Re: Байты в Биты и обратно Отправлено: Racheengel от Октябрь 20, 2016, 12:25 http://stackoverflow.com/questions/38160057/convert-qbytearray-to-qbitarray
Название: Re: Байты в Биты и обратно Отправлено: Kate от Октябрь 20, 2016, 12:47 Уважаемые новички Исправила,спасибо.Будьте добры пользоваться тегом для оформления кода. Может чего бы и ответил, но глаза ломать не хочу Спасибо за понимание Название: Re: Байты в Биты и обратно Отправлено: __Heaven__ от Октябрь 20, 2016, 13:37 Код: for (int j = 0; j<bitArray.size() / 8; j++) Зачем во втором цикле идёте по всему массиву? Название: Re: Байты в Биты и обратно Отправлено: Igors от Октябрь 21, 2016, 11:32 Код
Название: Re: Байты в Биты и обратно Отправлено: Old от Октябрь 21, 2016, 14:14 Лучше получать ссылку на байт только когда это требуется (установить 1).
Код
Название: Re: Байты в Биты и обратно Отправлено: deMax от Октябрь 21, 2016, 14:23 c |= (1 << (i % 8 )); Вот так правильно: c |= (1 << (7 - (i % 8 ))); для "правильного порядка бит" http://stackoverflow.com/questions/38160057/convert-qbytearray-to-qbitarray(i % 8 ) заменить на (i & 7) Название: Re: Байты в Биты и обратно Отправлено: Old от Октябрь 21, 2016, 15:11 Вот так правильно Правильность зависит исключительно от того, как разработчик представляет QBitArray. :)Я вот представляю его так: 0 бит - соответствует нулевому биту байт, 1ый - первому. +---+---+---+---+---+ | 4 | 3 | 2 | 1 | 0 | +---+---+---+---+---+ Название: Re: Байты в Биты и обратно Отправлено: deMax от Октябрь 24, 2016, 09:37 +---+---+---+---+---+ поэтому c |= (1 << (7 - (i & 7 ))); чтобы 0b10000000 или 0x80 выглядели в bitarray как ... 1 0 0 0 0 0 0 0 0 ...| 4 | 3 | 2 | 1 | 0 | +---+---+---+---+---+ Название: Re: Байты в Биты и обратно Отправлено: Old от Октябрь 24, 2016, 09:41 поэтому c |= (1 << (7 - (i & 7 ))); чтобы 0b10000000 или 0x80 выглядели в bitarray как ... 1 0 0 0 0 0 0 0 0 ... Нам нужно установить старший 8 бит байта, это i = 7.Подставляем в ваше выражение и сдвигаем 1 на 0 разрядов. Получаем 0x01, а не 0x80. Название: Re: Байты в Биты и обратно Отправлено: deMax от Октябрь 25, 2016, 12:45 Нам нужно установить старший 8 бит байта, это i = 7. Подставляем в ваше выражение и сдвигаем 1 на 0 разрядов. Получаем 0x01, а не 0x80. QBitArray () << 1 << 0 << 0 << 0 << 0 << 0 << 0 << 0; Для единицы i==0, он и будет старшим чтобы 0x80 или 0b10000000. Но это все красотульки для вывода, в памяти для little-endian порядок будет как у вас. Название: Re: Байты в Биты и обратно Отправлено: Old от Октябрь 25, 2016, 13:19 QBitArray () << 1 << 0 << 0 << 0 << 0 << 0 << 0 << 0; Для единицы i == 0 и эта единица младшего разряда 0x01 (0b00000001).Для единицы i==0, он и будет старшим чтобы 0x80 или 0b10000000. Но это все красотульки для вывода, в памяти для little-endian порядок будет как у вас. +---+---+---+---+---+ | 4 | 3 | 2 | 1 | 0 | +---+---+---+---+---+ ^ |