Пятница, 15 Ноя 2024, 11:19
Uchi.ucoz.ru
Меню сайта
Форма входа

Категории раздела
Высшая математика [11]
Экономическая социология [95]
Основы Менеджмента [64]
Бухгалтерский учёт [157]
Философия [163]
Мировая Экономика [603]
Бизнес планирование [29]
Финансирование и кредитование инвест [105]
Ценообразование [46]
Гражданское право [196]
Права Человека [173]
Основы Маркетинга [207]
Основы энергосбережения [55]
Информатика [0]
Экология и устойчивое развитие [0]
Физика для студентов [0]
Основы права [0]
Политология [0]
Не стандартные примеры на Delphi [169]
Примеры на Delphi7 [108]
Алгоритмы [94]
API [110]
Pascal [152]
Базы Данных [6]
Новости
Чего не хватает сайту?
500
Статистика
Зарегистрировано на сайте:
Всего: 51643


Онлайн всего: 122
Гостей: 122
Пользователей: 0
Яндекс.Метрика
Рейтинг@Mail.ru

Каталог статей


Главная » Статьи » Студентам » Алгоритмы

64-битное кодирование/декодирование I
Привожу нетестированный код. Автор: Arne de Bruijn.

{
64-битное декодирование файлов }
{ Arne de Bruijn }
uses
dos;
var

Base64:array[43..122] of byte;var

T:text;
Chars:set of char;
S:string;
K,I,J:word;
Buf:pointer;
DShift:integer;
F:file;
B,B1:byte;
Decode:array[0..63] of byte;
Shift2:byte;
Size,W:word;begin
FillChar(Base64,SizeOf(Base64),255);
J:=0;
for I:=65 to 90 do
begin
Base64[I]:=J;
Inc(J);
end;
for I:=97 to 122 do
begin
Base64[I]:=J;
Inc(J);
end;
for I:=48 to 57 do
begin
Base64[I]:=J;
Inc(J);
end;
Base64[43]:=J; Inc(J);
Base64[47]:=J; Inc(J);
if ParamCount=0 then
begin
WriteLn('UNBASE64 <mime-файл>
[<выходной файл>]');
Halt(1);
end;
S:=ParamStr(1);
assign(T,S);
GetMem(Buf,32768);
SetTextBuf(T,Buf^,32768);
{$I-} reset(T); {$I+}
if IOResult<>0 then
begin
WriteLn('Ошибка считывания ',S);
Halt(1);
end;
if ParamCount>=2
then
S:=ParamStr(2)
else
begin write('Расположение:');
ReadLn(S); end;
assign(F,S);
{$I-} rewrite(F,1); {$I+}
if IOResult<>0 then
begin
WriteLn('Ошибка создания ',S);
Halt(1);
end;
while not eof(T) do
begin
ReadLn(T,S);
if (S<>'') and
(pos(' ',S)=0) and
(S[1]>=#43) and
(S[1]<=#122)
and
(Base64[byte(S[1])]<>255) then
begin
FillChar(Decode,SizeOf(Decode),0);
DShift:=0;
J:=0; Shift2:=1;
Size:=255;
B:=0;
for I:=1 to Length(S)
do
begin
case S[I] of
#43..#122:B1:=Base64[Ord(S[I])];
else
B1:=255;
end;
if B1=255 then
if S[I]='=' then
begin
B1:=0; if Size=255 then Size:=J;
end
else
WriteLn('Ошибка символа:',S[I],' (',Ord(S[I]),')');
if DShift and 7=0 then
begin
Decode[J]:=byte(B1 shl 2);
DShift:=2;
end
else
begin
Decode[J]:=Decode[J] or Hi(word(B1) shl
(DShift+2));
Decode[J+1]:=Lo(word(B1) shl
(DShift+2));
Inc(J);
Inc(DShift,2);
end;
end;
if Size=255 then
Size:=J;
BlockWrite(F,Decode,Size);
end;
end;
Close(F);
close(T);end.
Категория: Алгоритмы | Добавил: Lerka (21 Ноя 2012)
Просмотров: 740 | Рейтинг: 1.0/ 6 Оштрафовать | Жаловаться на материал
Похожие материалы
Всего комментариев: 0

Для блога (HTML)


Для форума (BB-Code)


Прямая ссылка

Профиль
Пятница
15 Ноя 2024
11:19


Вы из группы: Гости
Вы уже дней на сайте
У вас: непрочитанных сообщений
Добавить статью
Прочитать сообщения
Регистрация
Вход
Улучшенный поиск
Поиск по сайту Поиск по всему интернету
Наши партнеры
Интересное
Популярное статьи
Портфолио ученика начальной школы
УХОД ЗА ВОЛОСАМИ ОЧЕНЬ ПРОСТ — ХОЧУ Я ЭТИМ ПОДЕЛИТ...
Диктанты 2 класс
Детство Л.Н. Толстого
Библиографический обзор литературы о музыке
Авторская программа элективного курса "Практи...
Контрольная работа по теме «Углеводороды»
Поиск
Главная страница
Используются технологии uCoz