Название: "Зеркалирование" буфера Отправлено: Waryable от Январь 25, 2011, 07:10 Извиняюсь, сначала тему назвал не правильно. Вобщем, проблема такая: есть массив байтов. Мне необходимо иметь возможность менять порядок следования битов в этом массиве. Другими словами:
- Формат1: старшие разряды имеют наибольший индекс; - Формат2: старшие разряды имеют наименьший индекс. Пример: буфер размером 7 байт. Для Формата №1 старший разряд имеет индекс: Index = 7*8-1 = 55. Для Формата №2: Index = 0. Грубо говоря, форматы являются зеркальными. Алгоритм должен быть расчитан на то, что размер буфера может меняться между сеансами работы программы. Я могу реализовать поразрядное выдергивание из входного буфера и укладывание разрядов в выходной буфер. Но хочется чего-нибудь более изящного. :) Название: Re: "Зеркалирование" буфера Отправлено: Fat-Zer от Январь 25, 2011, 07:30 если в буфере целое количество байтов, то реверс каждого байта+реверс массива... приличней на ум ничего не приходит... да и нет, наверное..
Если надо как можно быстрей, то можно сделать предвычесленную таблицу Название: Re: "Зеркалирование" буфера Отправлено: Waryable от Январь 25, 2011, 07:40 Если надо как можно быстрей, то можно сделать предвычесленную таблицу Если можно подробней.Название: Re: "Зеркалирование" буфера Отправлено: Fat-Zer от Январь 25, 2011, 07:57 Код: char reverse_table[256]={0, 0x80, 0x40, 0xC0,0xB0,0xa0,0xe0,... } PS: как запретить интерпретацию бб-кода без тега code? Название: Re: "Зеркалирование" буфера Отправлено: Fat-Zer от Январь 25, 2011, 08:38 Пример на Си:
Код в main - код для генерации таблицы Название: Re: "Зеркалирование" буфера Отправлено: Waryable от Январь 28, 2011, 05:43 Хм. Скопипастил в проект. Но пока "настоящим образом" не отлаживал. А по логике должно работать. )
Название: Re: "Зеркалирование" буфера Отправлено: brankovic от Февраль 12, 2011, 23:30 ещё есть такой вариант, иногда полезен:
Код
я так понимаю вы всё равно храните биты.. Название: Re: "Зеркалирование" буфера Отправлено: Fat-Zer от Февраль 12, 2011, 23:44 эмм...
ещё есть такой вариант, иногда полезен: эмм... а ничего, что вы храните в 8 раз больше и реверсируете побайтово? Если сказано битовый вектор значит битовый...Код
я так понимаю вы всё равно храните биты.. Название: Re: "Зеркалирование" буфера Отправлено: brankovic от Февраль 13, 2011, 00:15 std::vector <bool> специализирован, хранит 1 бит на каждый bool
Edit: но вообще-то std::vector <bool> медленно реверсится, так что если скорость критична, то ваш вариант лучше. Название: Re: "Зеркалирование" буфера Отправлено: Fat-Zer от Февраль 13, 2011, 00:47 std::vector <bool> специализирован, хранит 1 бит на каждый bool моя ошибка... не доглядел... ещё есть метод void vector <bool>::flip( ); [added] Ан нет... он просто инвертирует вектор |