|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.09.2010, 00:30 | #1 |
Форумчанин
Регистрация: 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 |
21.09.2010, 07:08 | #2 |
Форумчанин
Регистрация: 28.07.2009
Сообщений: 189
|
не совсем опнятно зажание
акак ты потом будещь расшифровывать?
пишу программы для студентов и школьников на Pascal, Delphi, C++, WINAPI, assembler
обучаю программированию на паскале(дистанционно);mail: hruslow@gmail.com |
21.09.2010, 09:30 | #3 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
вообще-то надо поступать не так.
Почему в задании даётся ИСКЛЮЧИТЕЛЬНО англоязычный текст знаете? Потому что ВСЕ символы без исключения имеют код <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-ми другим реализовать. Если именно так стоит задание. Это тоже несложно. На каком языке пишете? |
21.09.2010, 19:26 | #4 |
Форумчанин
Регистрация: 24.03.2009
Сообщений: 375
|
Разрешите поинтересоваться, каким способом данное можно реализовать?
Видимо пробежать по всем байтам, каждый раз делая сдвиг влево с начало на 1, потом на 2 и так до 8. Потом заново на 1, 2, 3...8. Причем как-то надо запоминать биты, которые вышли за границу байта при сдвиге и записывать их во младшие разряды предыдущего байта. Тут явно ассемблер, но как можно это сделать средствами delphi или Си? |
21.09.2010, 21:34 | #5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Код:
Современные языки программирования позволяют оперировать с байтом на уровне бит. В Delphi это операции NOT AND OR XOR SHR SHL И этого уже вполне достаточно... |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вывод набора символов на экран циклом 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 |