Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2010, 00:30   #1
0479
Форумчанин
 
Аватар для 0479
 
Регистрация: 27.09.2009
Сообщений: 153
По умолчанию преобразование 8-битного набора символов в 7-битный.

Написать программу сжатия и восстановления англоязычного
текстового файла путем преобразования 8-битного набора символов в 7-битный.Если кто то писал такую программу то выложите пожалуйста исходник.То есть берётся сташий бит и распределяется по семи незанятым позициям восьмого бита.
До сжатия
байт 1: 0111 0101
байт 2: 0111 1101
байт 3: 0010 0011
байт 4: 0101 0110
байт 5: 0001 0000
байт 6: 0110 1101
байт 7: 0010 1010
байт 8: 0111 1001
После
байт 1 (читается сверху вниз)
байт 2: 1111 1101
байт 3: 1010 0011
байт 4: 1101 0110
байт 5: 0001 0000
байт 6: 1110 1101
байт 7: 0010 1010
байт 8: 1111 1001
0479 вне форума Ответить с цитированием
Старый 21.09.2010, 07:08   #2
D@rkD@iver
Форумчанин
 
Регистрация: 28.07.2009
Сообщений: 189
По умолчанию

не совсем опнятно зажание
акак ты потом будещь расшифровывать?
пишу программы для студентов и школьников на Pascal, Delphi, C++, WINAPI, assembler
обучаю программированию на паскале(дистанционно);mail: hruslow@gmail.com
D@rkD@iver вне форума Ответить с цитированием
Старый 21.09.2010, 09:30   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

вообще-то надо поступать не так.
Почему в задании даётся ИСКЛЮЧИТЕЛЬНО англоязычный текст знаете?
Потому что ВСЕ символы без исключения имеют код <128
значит старший бит у них гарантированно нулевой.

Ну а дальше просто:
записываем по 7 битов в строку, оттуда выделяем 8 битов и пишем в файл.
Обратная операция: собираем эти 8-ми битные символы в длинную последовательность и выделяем по 7 бит.
(при кодировании в конце надо будет дополнять до кратного 8-битам нуликами...)

поясню на Вашем же примере:
До сжатия
байт 1: 0111 0101
байт 2: 0111 1101
байт 3: 0010 0011

в процессе сжатия:
111010111111010100011 (дополняем нулями до кратной 8-ми) 000

после "сжатия"
Байт1: 11101011
Байт2: 11110101
Байт3: 00011000

p.s. собственно "сжатие" проявится при большем числе байт...

p.p.s. Можно и Ваш алгоритм распределения одного байта по 7-ми другим реализовать. Если именно так стоит задание. Это тоже несложно.
На каком языке пишете?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.09.2010, 19:26   #4
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Разрешите поинтересоваться, каким способом данное можно реализовать?

Видимо пробежать по всем байтам, каждый раз делая сдвиг влево с начало на 1, потом на 2 и так до 8. Потом заново на 1, 2, 3...8. Причем как-то надо запоминать биты, которые вышли за границу байта при сдвиге и записывать их во младшие разряды предыдущего байта.

Тут явно ассемблер, но как можно это сделать средствами delphi или Си?
VadEr вне форума Ответить с цитированием
Старый 21.09.2010, 21:34   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Код:
Разрешите поинтересоваться, каким способом данное можно реализовать?
Данное — это что именно?

Современные языки программирования позволяют оперировать с байтом на уровне бит. В Delphi это операции NOT AND OR XOR SHR SHL
И этого уже вполне достаточно...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод набора символов на экран циклом for (pascal) street_spirit Помощь студентам 2 15.09.2010 16:42
Преобразование символов в цифры Артэс Общие вопросы C/C++ 26 30.12.2009 22:37
Преобразование строки символов в число. pa6kevi4 Общие вопросы C/C++ 2 15.09.2009 20:46
курсор автоматом возвращался в edt_1 и после набора двух символов переходил в edt_2 marinochka Помощь студентам 2 30.08.2009 12:29
Преобразование символов в строке ZeroQl Помощь студентам 12 17.02.2009 23:06