Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 19.12.2015
Сообщений: 2
1

Как организовать побитовую запись двоичного кода (Хаффман) ?

09.05.2016, 20:10. Показов 821. Ответов 1

Пытаюсь реализовать алгоритм Хаффмана, который будет сжимать текстовый файл. Уже построено дерево tree, у которого есть:
tree->simvol // char в котором хранится сам символ (например 'a')
tree->code // string, двоичный код для этого символа (например 1001)

Мне нужно написать функцию, которая пройдется по исходному файлу, и будет считывать каждый символ, сверяя его с символами в моем дереве, а найдя нужный - запишет в новый файл последовательность единиц и нулей(tree->code).

Трудность именно в побитовой записи, т.к я не совсем представляю, как ее организовать. Поясню - мне нужно, чтобы ,например, последовательность 10011110 занимала именно 8 бит, т.е единица или ноль занимали бы 1 бит, иначе сжатия не получится(если я просто вместо буквы "а" запишу "1001" как набор символов, а не битов).

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void shifr(){
  ifstream myfile("file.txt");//открыли файл
  char ch;
  if (!myfile.is_open()) // если файл не открыт
           cout << "Файл не может быть открыт!\n"; // сообщить об этом
  else
  {
    while (myfile.get(ch))//проходимся посимвольно по всему текстовому файлу
    {
    find_char(ch);//находим нужный символ в дереве и записываем код этого символа в новый файл
    }   
    myfile.close();
  }
}
 
void find_char(spisok *&tree, char ch) {//рекурсивный обход дерева и поиск в нем символа
  if (tree->left==NULL && tree->right==NULL && tree->simvol==ch) {
    //???
    //вот тут нужно как-то записать код из tree->code в новый файл...
    //???
  }
  if (tree->left!=NULL) {
    find_char(tree->left,ch);
  }
  if (tree->right!=NULL) {
    find_char(tree->right,ch); 
  }
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2016, 20:10
Ответы с готовыми решениями:

Запись двоичного кода в файл
Доброго времени суток. Реализую алгоритм Хаффмана по заданию и не совсем понимаю, как записать биты...

Запись двоичного кода в блокнот
Здравствуйте, как можно прочитать двоичной код файла, и записать его в блокнот ?

Запись из файла в Базу данных (как организовать структура кода)
Из файла построчно считывается текст. Далее текст разбивается на отдельные значения и заносится в...

Получение бинарного кода, Хаффман
Доброго времени суток, работаю с алгоритмом Хаффмана(работаю со строкой &quot;Мама мыла лапу ламы&quot;) Так...

1
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
09.05.2016, 21:09 2
std::bitset, например.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2016, 21:09

Как перевести из двоичного кода в целое число?
например, мы имеем int x = 1101; или string y = &quot;1101&quot;; как можно перевести в целое число int m?...

Как можно найти длину двоичного кода числа?
суть задачи в том, что на вход подается десятичное число, и нужно определить длину его двоичного...

Как сделать побитовую свертку ЛЧМ сигнала
Имеется код ЛЧМ сигнала и попытка побитовой свертки сигнала y_hex с его моделью x_hex_sin на...

Хаффман- побитовая запись в файл. ПОБИТОВАЯ=)
Снова хаффман...помогите придумать как побитово вести запись в файл,ведь коды хаффмана не равны...

Как организовать тестирование js-кода?
как можно организовать тестирование js кода ? если тем же js брать значение элемента и вставлять...

Как организовать большую часть кода в main?
В main у меня создается 5 кнопок игрового меню и там же в main вешается слушатель и располагается...


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

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

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