Форум программистов, компьютерный форум CyberForum.ru

C++

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

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

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

Доброго времени суток! Появилась необходимость замены битовых комбинаций по заранее сгенерированным правилам. Суть проблемы такова: имеется битовый поток, необходимо пятибитовые комбинации заменить на другие. Предположим есть текстовый документ, в котором два столбца, в одном исходная комбинация бит, а через пробел комбинация на которую необходимо заменить. Помогите пожалуйста с процедурой подгрузки такого текстового документы, и процедурой замены комбинаций по правилу, указанному в txt. Благодарю за любые советы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
11.10.2016, 22:49     Таблица битовых переходов #2
Это такой дурацкий метод русский текст шифровать? Напишите внятно, что за "битовый поток".

Можно считывать по 5 бит, но проще всего читать/писать блоками по 5*8=40 бит и делать замены внутри блока. Учитывая, что их всего 32, сортированного массива (lookup table) более, чем достаточно.
Vokintos
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 15
11.10.2016, 23:00  [ТС]     Таблица битовых переходов #3
Преобразую файл в битовый поток(массив,вектор, кто как привык называть), далее беру первые 5 бит(единички или нолики) и заменяю на другую 5 битную комбинацию (по правилу которое указано в текстовом файле,таблица соответствия ), после всех этих замен записываю в другой массив.

Добавлено через 1 минуту
Блоки плодить не хочу, у меня файлы для преобразования не такие уж и маленькие (от сотен метров )
gray_fox
What a waste!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 3
11.10.2016, 23:10     Таблица битовых переходов #4
Цитата Сообщение от Vokintos Посмотреть сообщение
Блоки плодить не хочу, у меня файлы для преобразования не такие уж и маленькие (от сотен метров )
Если у вас блок для замены 5 бит, то вариантов для его замены только 32 в худшем случае. Как так получается что "файлы для преобразования не такие уж и маленькие"?
Байт
Эксперт C
15551 / 9893 / 1487
Регистрация: 24.12.2010
Сообщений: 18,501
11.10.2016, 23:15     Таблица битовых переходов #5
gray_fox, Берусь на спор в алфавите из 2-х символов 0 и 1 создать слово в 40 гигов. И без каких-либо периодов
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
11.10.2016, 23:22     Таблица битовых переходов #6
Цитата Сообщение от Vokintos Посмотреть сообщение
Преобразую файл в битовый поток

Не по теме:

Впечатление какого-то бреда.


Если я вас все-таки понял, то вы используете custom Base32. Какого размера ваши файлы, значения не имеет. Лучший вариант обработки - именно блоки, кратные 40 bits.
gray_fox
11.10.2016, 23:29
  #7

Не по теме:

Цитата Сообщение от Байт Посмотреть сообщение
gray_fox, Берусь на спор в алфавите из 2-х символов 0 и 1 создать слово в 40 гигов. И без каких-либо периодов
Да я похоже просто не понял, что значит "файл для преобразования"...

Vokintos
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 15
16.10.2016, 21:33  [ТС]     Таблица битовых переходов #8
в файлах перевод из байт в биты, и примерная таблица переходов(для 4-х бит), по такому правилу нужно преобразовать.
Не прошу ничего написать, просто натолкните на алгоритм замены комбинаций.
Файлы большие, а скорее всего будут подгружаться в реальном масштабе времени. До этого писал на делфи, а сейчас обстоятельства заставили перейти на C++. Поэтому только изучая и дохожу до всего. Задача есть, а время поджимает.
Вложения
Тип файла: txt Рї1.txt (733 байт, 2 просмотров)
Тип файла: txt таблица переходов кам 16.txt (176 байт, 2 просмотров)
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
16.10.2016, 22:19     Таблица битовых переходов #9

Не по теме:

Кажется, давать вам советы бесполезно, но все же сделаю еще одну попытку.


Не могу представить, для чего могло бы потребоваться преобразование бит в байты (даже на Delphi). Расскажите лучше, в чем ваша задача: не в смысле всяких глупостей с битами на C, а сама исходная задача - на литературном русском.
Vokintos
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 15
17.10.2016, 20:24  [ТС]     Таблица битовых переходов #10
Имеется битовый массив
1.необходимо произвести сначала процедуру замены,
2.после чего декодировать данный поток по Риду-Соломона,
3.перестановка бит,
4.затем разделить на 40 потоков по одному биту,
5.далее в каждом произвести операции перестановки,
а в конце
6.слить все потоки побайтно в один.
Такая вот нехитрая задачка.
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
17.10.2016, 22:01     Таблица битовых переходов #11
Цитата Сообщение от Vokintos Посмотреть сообщение
Имеется битовый массив
Забудьте про "битовый массив".
Вопрос был о постановке задачи, а не о манипуляциях с битами. (К слову, RS не требует преобразования бит в байты).
Vokintos
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 15
17.10.2016, 22:07  [ТС]     Таблица битовых переходов #12
Хорошо, пусть так, есть файл, (*.bin). Сути не меняет, в любом случае придется преобразовывать в биты, так как модуляционное декодирование мне не произвести без этого.
Библиотека по RS имеется, разбираюсь с ней, но для декодирования с исправлением ошибок операции проводятся в битовом формате.
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
17.10.2016, 22:31     Таблица битовых переходов #13
ОК. И в чем вопрос? Делите на битовые блоки и работаете с ними. Удобно, чтобы размер блока был кратен байту. Никакого преобразования бит в байты не требуется.
Vokintos
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 15
17.10.2016, 22:37  [ТС]     Таблица битовых переходов #14
Загвоздка как раз в процедуре замены, никак не могу догнать как эти комбинации 5 битные (именно 5 битные) заменить на другие, до конца всего массива.
Т.е.
00000 заменить на 00100
01001 на 01101
И так все 32 комбинации.
Если простым условием if then, то считаю это не рационально, потому что таблица переходов меняется, и содержится в *.txt. И без нее придется каждый раз код менять.
Байт
Эксперт C
15551 / 9893 / 1487
Регистрация: 24.12.2010
Сообщений: 18,501
17.10.2016, 22:45     Таблица битовых переходов #15
Цитата Сообщение от Vokintos Посмотреть сообщение
if then
Да уж! Есть стандартный прием (стандартней не бывает). Создаете (в файле) 32-х строчную таблицу. строка 0 - код, куда переходит комбинация 00000, ... строка 31 - во что переходит комбинация 11111. Считываете ее в память. Исходная комбинация - адрес, номер строки в таблице. Если это не понятно, пусть другие разжевывают.
У кого зубы молодые.
Vokintos
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 15
17.10.2016, 22:53  [ТС]     Таблица битовых переходов #16
Да Вы правы я так и сделал, таблица и в ней код по строкам. Меня как раз и интересует эта процедура вызова (обращения, уж не знаю как и обозвать) из этой таблицы. Это то что я и пытался спросить, понимаю что коряво, но объяснился как мог!
Байт
Эксперт C
15551 / 9893 / 1487
Регистрация: 24.12.2010
Сообщений: 18,501
17.10.2016, 22:59     Таблица битовых переходов #17
Цитата Сообщение от Vokintos Посмотреть сообщение
процедура вызова (обращения, уж не знаю как и обозвать) из этой таблицы.
Берешь свои 5 битов. Превращаешь их в чисто от 1 до 31. Это число и будет номером строки в таблице. Извлекаешь эту строку (там тоже сидят 5 новых битов). Неужели что-то еще может быть непонятно?!!! Если это так - срочно меняйте специальность.
gazlan
3130 / 1905 / 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).
Вложения
Тип файла: 7z bit_stream.7z (1.6 Кб, 1 просмотров)
Байт
Эксперт C
15551 / 9893 / 1487
Регистрация: 24.12.2010
Сообщений: 18,501
17.10.2016, 23:11     Таблица битовых переходов #19
Цитата Сообщение от Байт Посмотреть сообщение
Превращаешь их в число от 1 до 31.
Ошибся малек. От 0 до 31.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2016, 22:39     Таблица битовых переходов
Еще ссылки по теме:

Реализация битовых операций в Си++ C++
Нумерация битов в битовых полях C++
Типы битовых полей C++
Массив битовых полей C++
Зависимость битовых образов C++ WinAPI

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

Или воспользуйтесь поиском по форуму:
Vokintos
0 / 0 / 0
Регистрация: 03.05.2016
Сообщений: 15
20.10.2016, 22:39  [ТС]     Таблица битовых переходов #20
Создал процедуру подгрузки таблицы и дополнительный массивов, также поиск байтовой синхрокомбинации и усечение по ней. Но уткнулся в простую процедуру перевода из байт в биты(в файлах ниже). Выдает ошибку, что при выполнении на процессоре, что на видюхе. Взгляните и если сможете, скажите что не так. Заранее спасибо.
Вложения
Тип файла: txt MAIN[1].txt (4.7 Кб, 1 просмотров)
Тип файла: txt PROC[1].txt (4.4 Кб, 2 просмотров)
Тип файла: txt GPU[1].txt (5.8 Кб, 1 просмотров)
Yandex
Объявления
20.10.2016, 22:39     Таблица битовых переходов
Ответ Создать тему
Опции темы

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