Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
 
Vokintos
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 15
#1

Таблица битовых переходов - C++

11.10.2016, 22:05. Просмотров 791. Ответов 22
Метки нет (Все метки)

Доброго времени суток! Появилась необходимость замены битовых комбинаций по заранее сгенерированным правилам. Суть проблемы такова: имеется битовый поток, необходимо пятибитовые комбинации заменить на другие. Предположим есть текстовый документ, в котором два столбца, в одном исходная комбинация бит, а через пробел комбинация на которую необходимо заменить. Помогите пожалуйста с процедурой подгрузки такого текстового документы, и процедурой замены комбинаций по правилу, указанному в txt. Благодарю за любые советы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2016, 22:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Таблица битовых переходов (C++):

Обработка битовых последовательности (Срочно) - C++
Решите пожалуйста задачу на с++ НЕ че не могу сделать, голову сломал, напишите плиз а то я у же в очередье на отчисления в универе ...

Разворот битовых образов - C++ Builder
Подскажите пожалуйста можно ли разворачивать битовые образы во время работы программы... то есть имеется изображение которое нужно...

Вывод битовых изображений - Visual C++
Как в Visual'е можно выводить в окне картинки без использования DDraw? Я знаю, что для этой цели есть функции...

Как отключить принудительное выравнивание битовых полей в структуре? - Visual C++
Подскажите пожалуйста как в Visual C++ 2008 правильно организовать выравнивание битовых полей в структурах? Пример кода: #pragma...

Зависимость битовых образов - C++ WinAPI
Рассчитанный на большее количество цветов, чем имеется, приложением не выведется? Или кем-то преобразуется? Отличается ли от образов для,...

Как получить стандартный набор битовых масок для MapGenericMask ? - C++ WinAPI
Здравствуйте! Данная функция, как я понял, принимает маску Generic Access, и возвращает набор стандартных и специфических прав. При...

22
Vokintos
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 15
17.10.2016, 22:53  [ТС] #16
Да Вы правы я так и сделал, таблица и в ней код по строкам. Меня как раз и интересует эта процедура вызова (обращения, уж не знаю как и обозвать) из этой таблицы. Это то что я и пытался спросить, понимаю что коряво, но объяснился как мог!
0
Байт
Эксперт C
16545 / 10815 / 1639
Регистрация: 24.12.2010
Сообщений: 20,864
17.10.2016, 22:59 #17
Цитата Сообщение от Vokintos Посмотреть сообщение
процедура вызова (обращения, уж не знаю как и обозвать) из этой таблицы.
Берешь свои 5 битов. Превращаешь их в чисто от 1 до 31. Это число и будет номером строки в таблице. Извлекаешь эту строку (там тоже сидят 5 новых битов). Неужели что-то еще может быть непонятно?!!! Если это так - срочно меняйте специальность.
1
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
17.10.2016, 23:06 #18
Поскольку замена идентична по всему файлу, достаточно в процедуре инициализации прочитать настройки и создать таблицу замен (сортированный массив из 32 элементов). Далее, читаете ваши 5 бит - индекс в массиве, находите в таблице нужную замену и пишете эти 5 бит в новый буфер. Все это удобно сделать в 5*8=40-битном буфере (например, unsigned int64). Возможно, производительнее будет читать по 8 бит (используя 256-элементную таблицу замен).

То есть, для одного 40-битного блока либо 8 раз читаете/пишете по 5 бит, либо 5 раз читаете/пишете по 8 бит с поиском/заменой по однократно составленной lookup (hash)-таблице.

Единственное, надо либо предусмотреть обработку неполного (последнего) блока, либо дополнять файл до кратного размера.

Если не думать об оптимизации чтения/записи, то можно просто читать/писать по 5 бит из потока (см. код bit_stream).
0
Вложения
Тип файла: 7z bit_stream.7z (1.6 Кб, 1 просмотров)
Байт
Эксперт C
16545 / 10815 / 1639
Регистрация: 24.12.2010
Сообщений: 20,864
17.10.2016, 23:11 #19
Цитата Сообщение от Байт Посмотреть сообщение
Превращаешь их в число от 1 до 31.
Ошибся малек. От 0 до 31.
0
Vokintos
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 15
20.10.2016, 22:39  [ТС] #20
Создал процедуру подгрузки таблицы и дополнительный массивов, также поиск байтовой синхрокомбинации и усечение по ней. Но уткнулся в простую процедуру перевода из байт в биты(в файлах ниже). Выдает ошибку, что при выполнении на процессоре, что на видюхе. Взгляните и если сможете, скажите что не так. Заранее спасибо.
0
Вложения
Тип файла: txt MAIN[1].txt (4.7 Кб, 1 просмотров)
Тип файла: txt PROC[1].txt (4.4 Кб, 2 просмотров)
Тип файла: txt GPU[1].txt (5.8 Кб, 1 просмотров)
gazlan
3133 / 1909 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
20.10.2016, 22:56 #21
C++
1
StartCPUcharToBool()
Опять?

Не по теме:

Неизлечимый случай. Отписываюсь от темы.

0
Vokintos
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 15
20.10.2016, 23:01  [ТС] #22
Почему опять, появилась необходимость сделать переворот бит в байте и полубайте. Тем более на видюхе операция преобразования идет гораздо быстрее. Показывали на C#, но заразы алгоритма не дали.

Добавлено через 2 минуты
Мне еще производить дескремблирование, в любом случае нужен битовый поток, причем целиковый. Так как скремблер накладывается на длину сверхцикла комбинации.
0
Vokintos
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 15
28.10.2016, 03:30  [ТС] #23
C++
1
2
3
4
5
6
7
8
9
10
11
int RazuplotRS(const BYTE *ptrVar, BYTE *ptrb, int fileSize) //
{int j = 235;
 for (int i = 1, int a = 0; i <= fileSize-1;a++,i++)
{ if (i==j)
     {j+=235;
      i+=21;
     }
   ptrb[a] = ptrVar[i];
   }
return 0;
}

не могу понять почему не хочет до конца копировать, проходит один цикл, а затем копирует фигню.
Смысл такой, не нужен каждый 1 байт, и с 235 по 254(и так по циклу, их просто не писать) .
0
28.10.2016, 03:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2016, 03:30
Привет! Вот еще темы с ответами:

Реализация битовых операций в Си++ - C++
По теме: Реализация битовых операций в Си++. Даны два неравных числа: n и m, не превосходящие 31. Вычислите 2^n+2^m.

Таблица переходов D-триггера - Электроника
Доброго времени суток. Помогите составить таблицу переходов для двухступенчатого D-триггера. Заранее большое спасибо

Конечный автомат и таблица переходов - Алгоритмы
Здравствуйте! Может ли так быть, что в таблице переходов из одного состояния можно перейти в несколько состояний? И еще вопрос-...

Задача про кубик (таблица переходов состояний) - Теория автоматов
Всеи привет. Нуждаюсь в помощи вашей друзья, как можно срочно, горю))) Помогите пожалуйста. Вот условие: Игральный кубик многократно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru