0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 32
|
|
1 | |
Таблица битовых переходов11.10.2016, 22:05. Показов 2008. Ответов 22
Метки нет (Все метки)
Доброго времени суток! Появилась необходимость замены битовых комбинаций по заранее сгенерированным правилам. Суть проблемы такова: имеется битовый поток, необходимо пятибитовые комбинации заменить на другие. Предположим есть текстовый документ, в котором два столбца, в одном исходная комбинация бит, а через пробел комбинация на которую необходимо заменить. Помогите пожалуйста с процедурой подгрузки такого текстового документы, и процедурой замены комбинаций по правилу, указанному в txt. Благодарю за любые советы.
0
|
11.10.2016, 22:05 | |
Ответы с готовыми решениями:
22
Таблица переходов D-триггера Таблица переходов регулярных выражений Конечный автомат и таблица переходов Задача про кубик (таблица переходов состояний) |
11.10.2016, 22:49 | 2 |
Это такой дурацкий метод русский текст шифровать? Напишите внятно, что за "битовый поток".
Можно считывать по 5 бит, но проще всего читать/писать блоками по 5*8=40 бит и делать замены внутри блока. Учитывая, что их всего 32, сортированного массива (lookup table) более, чем достаточно.
0
|
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 32
|
|
11.10.2016, 23:00 [ТС] | 3 |
Преобразую файл в битовый поток(массив,вектор, кто как привык называть), далее беру первые 5 бит(единички или нолики) и заменяю на другую 5 битную комбинацию (по правилу которое указано в текстовом файле,таблица соответствия ), после всех этих замен записываю в другой массив.
Добавлено через 1 минуту Блоки плодить не хочу, у меня файлы для преобразования не такие уж и маленькие (от сотен метров )
0
|
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
|
|
11.10.2016, 23:10 | 4 |
Если у вас блок для замены 5 бит, то вариантов для его замены только 32 в худшем случае. Как так получается что "файлы для преобразования не такие уж и маленькие"?
0
|
gray_fox
|
11.10.2016, 23:29
#7
|
0
|
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 32
|
|
16.10.2016, 21:33 [ТС] | 8 |
в файлах перевод из байт в биты, и примерная таблица переходов(для 4-х бит), по такому правилу нужно преобразовать.
Не прошу ничего написать, просто натолкните на алгоритм замены комбинаций. Файлы большие, а скорее всего будут подгружаться в реальном масштабе времени. До этого писал на делфи, а сейчас обстоятельства заставили перейти на C++. Поэтому только изучая и дохожу до всего. Задача есть, а время поджимает.
0
|
16.10.2016, 22:19 | 9 |
Не по теме: Кажется, давать вам советы бесполезно, но все же сделаю еще одну попытку. Не могу представить, для чего могло бы потребоваться преобразование бит в байты (даже на Delphi). Расскажите лучше, в чем ваша задача: не в смысле всяких глупостей с битами на C, а сама исходная задача - на литературном русском.
0
|
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 32
|
|
17.10.2016, 20:24 [ТС] | 10 |
Имеется битовый массив
1.необходимо произвести сначала процедуру замены, 2.после чего декодировать данный поток по Риду-Соломона, 3.перестановка бит, 4.затем разделить на 40 потоков по одному биту, 5.далее в каждом произвести операции перестановки, а в конце 6.слить все потоки побайтно в один. Такая вот нехитрая задачка.
0
|
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 32
|
|
17.10.2016, 22:07 [ТС] | 12 |
Хорошо, пусть так, есть файл, (*.bin). Сути не меняет, в любом случае придется преобразовывать в биты, так как модуляционное декодирование мне не произвести без этого.
Библиотека по RS имеется, разбираюсь с ней, но для декодирования с исправлением ошибок операции проводятся в битовом формате.
0
|
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 32
|
|
17.10.2016, 22:37 [ТС] | 14 |
Загвоздка как раз в процедуре замены, никак не могу догнать как эти комбинации 5 битные (именно 5 битные) заменить на другие, до конца всего массива.
Т.е. 00000 заменить на 00100 01001 на 01101 И так все 32 комбинации. Если простым условием if then, то считаю это не рационально, потому что таблица переходов меняется, и содержится в *.txt. И без нее придется каждый раз код менять.
0
|
Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
17.10.2016, 22:45 | 15 |
Да уж! Есть стандартный прием (стандартней не бывает). Создаете (в файле) 32-х строчную таблицу. строка 0 - код, куда переходит комбинация 00000, ... строка 31 - во что переходит комбинация 11111. Считываете ее в память. Исходная комбинация - адрес, номер строки в таблице. Если это не понятно, пусть другие разжевывают.
У кого зубы молодые.
1
|
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 32
|
|
17.10.2016, 22:53 [ТС] | 16 |
Да Вы правы я так и сделал, таблица и в ней код по строкам. Меня как раз и интересует эта процедура вызова (обращения, уж не знаю как и обозвать) из этой таблицы. Это то что я и пытался спросить, понимаю что коряво, но объяснился как мог!
0
|
Диссидент
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
17.10.2016, 22:59 | 17 |
Берешь свои 5 битов. Превращаешь их в чисто от 1 до 31. Это число и будет номером строки в таблице. Извлекаешь эту строку (там тоже сидят 5 новых битов). Неужели что-то еще может быть непонятно?!!! Если это так - срочно меняйте специальность.
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
|
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 32
|
|
20.10.2016, 22:39 [ТС] | 20 |
Создал процедуру подгрузки таблицы и дополнительный массивов, также поиск байтовой синхрокомбинации и усечение по ней. Но уткнулся в простую процедуру перевода из байт в биты(в файлах ниже). Выдает ошибку, что при выполнении на процессоре, что на видюхе. Взгляните и если сможете, скажите что не так. Заранее спасибо.
0
|
20.10.2016, 22:39 | |
20.10.2016, 22:39 | |
Помогаю со студенческими работами здесь
20
Ошибка в битовых сдвигах/битовых масках ПодТаблицы с данными(Таблица-Таблица-Таблица-Таблица) и наследованием Обработка битовых изображений Сколько битовых строк? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |