Исходящий поток пуст. что-то не правильно...
Вот часть кода Pascal (Delphi) :
PHP код:
unit Base45;
interface
uses Classes;
procedure Base45_Decode(const AInput, AOutput: TStream);
implementation
const
DecodeTable: array[0..255] of byte = (
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
36, 255, 255, 255, 37, 38, 255, 255, 255, 255, 39, 40, 255, 41, 42, 43,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, 255, 255, 255, 255, 255,
255, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, (* UpperCase *)
25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 35, 255, 255, 255, 255,
255, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, (* LowerCase *)
25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 35, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255);
procedure Base45_Decode(const AInput, AOutput: TStream);
var
ch, a, b: byte;
x: word;
begin
ch:= 0;
repeat // Запускаем цикл
// Чтение входящего потока
AInput.Read(ch, 1);
a:= DecodeTable[ch];
// Дублируем чтение
AInput.Read(ch, 1);
b:= DecodeTable[ch];
// Если закончили, выходим из процедуры
if (a = 255) or (b = 255) then exit;
// Алгоритм кодирования
x:= a + 45 * b;
// Если текущая позиция (указатель) не достиг конца
if AInput.Position < AInput.Size then
begin
AInput.Read(ch, 1);
a:= DecodeTable[ch];
//
if a = 255 then exit;
x:= x + (a * 45 * 45);
// Сдвиг вправо на 8 байт
ch:= x shr 8;
// Записываем в исходящий поток
AOutput.Write(ch, 1);
end;
ch:= x and $FF;
AOutput.Write(ch, 1);
until AInput.Position = AInput.Size;
// Достигли конца - выход из цикла
end;
end.
Прокомментировать: