Bob Swart - Интернет решения от доктора Боба

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.
Описание книги "Интернет решения от доктора Боба"
Описание и краткое содержание "Интернет решения от доктора Боба" читать бесплатно онлайн.
Говоря о декодировании, реализация его в Паскале преобразования квартетов обратно в триплеты следующая:
procedure Kwartet2Triplet(const Kwartet: TKwartet; var Triplet: TTriplet);
var
i: Integer;
begin
Triplet[0] := ((Kwartet[0] - Ord(SP)) SHL 2) +
(((Kwartet[1] - Ord(SP)) AND $30) SHR 4);
Triplet[1] := (((Kwartet[1] - Ord(SP)) AND $0F) SHL 4) +
(((Kwartet[2] - Ord(SP)) AND $3C) SHR 2);
Triplet[2] := (((Kwartet[2] - Ord(SP)) AND $03) SHL 6) +
((Kwartet[3] - Ord(SP)) AND $3F)
end {Kwartet2Triplet};
Если размер триплета в файле менее 3 байт (4 байта в квартете), то производится добавление структуры нулями при кодировании и декодировании.
1.1.2. XXEncode и XXDecode
UUкодирование было наиболее популярным форматом 64 битного кодирования. Ограничение состояло в том, что набор символов не мог транслироваться между наборами ASCII и EBCDIC (IBM мейнфреймы). XXencode очень похож на UUEncode, просто используется другой набор символов, что более удобно между различными типами систем, например как указано выше между EBCDIC и ASCII.
Набор символов XXEncode 0 + 8 6 16 E 24 M 32 U 40 c 48 k 56 s 1 – 9 7 17 F 25 N 33 V 41 d 49 l 57 t 2 0 10 8 18 G 26 O 34 W 42 e 50 m 58 u 3 1 11 9 19 H 27 P 35 X 43 f 51 n 59 v 4 2 12 A 20 I 28 Q 36 Y 44 g 52 o 60 w 5 3 13 B 21 J 29 R 37 Z 45 h 53 p 61 x 6 4 14 C 22 K 30 S 38 a 46 i 54 q 62 y 7 5 15 D 23 L 31 T 39 b 47 j 55 r 63 zЗаметим что если для UUEncodeиспользуется подмножество набора символов ASCII (32..96), то для XXEncode это не так.
Для преобразования процедур Triplet2Kwartet и Kwartet2Triplet для поддержки мы вводим дополнительный массив из 64 символов.
Нам также необходимо модифицировать процедуры Triplet2Kwartet и Kwartet2Triplet следующим образом.
const
XX: Array[0..63] of Char =
'+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
procedure Triplet2Kwartet(const Triplet: TTriplet; var Kwartet: TKwartet);
var
i: Integer;
begin
Kwartet[0] := (Triplet[0] SHR 2);
Kwartet[1] := ((Triplet[0] SHL 4) AND $30) +
((Triplet[1] SHR 4) AND $0F);
Kwartet[2] := ((Triplet[1] SHL 2) AND $3C) +
((Triplet[2] SHR 6) AND $03);
Kwartet[3] := (Triplet[2] AND $3F);
for i:=0 to 3 do
if Kwartet[i] = 0 then Kwartet[i] := $40 + Ord(SP)
else Inc(Kwartet[i],Ord(SP));
if XXCode then
for i:=0 to 3 do Kwartet[i] := Ord(XX[(Kwartet[i] - Ord(SP)) mod $40])
end {Triplet2Kwartet};
Последние несколько строк новые для процедуры Triplet2Kwartet и мы используем набор символов XXencode для возврата правильно закодированных символов. Помните, что UUEncode возвращает индекс кодированного символа, после чего мы к нему добавляем код #32, так что если XXencode используется после преобразования в UUEncode, то мы должны вычесть 32 и использовать результат как индекс в таблицу символов XXencode.
То же самое относится и к процедуре Kwartet2Triplet, где мы должны преобразовать XXencode символы перед использованием алгоритма UUdecode (заметим, что мы теперь не передаем Kwartet как const).
procedure Kwartet2Triplet(Kwartet: TKwartet; var Triplet: TTriplet);
var
i: Integer;
begin
if XXCode then
begin
for i:=0 to 3 do
begin
case Chr(Kwartet[i]) of
'+': Kwartet[i] := 0 + Ord(SP);
'-': Kwartet[i] := 1 + Ord(SP);
'0'..'9': Kwartet[i] := 2 + Kwartet[i]
- Ord('0') + Ord(SP);
'A'..'Z': Kwartet[i] := 12 + Kwartet[i]
- Ord('A') + Ord(SP);
'a'..'z': Kwartet[i] := 38 + Kwartet[i]
- Ord('a') + Ord(SP)
end
end
end;
Triplet[0] := ((Kwartet[0] - Ord(SP)) SHL 2) +
(((Kwartet[1] - Ord(SP)) AND $30) SHR 4);
Triplet[1] := (((Kwartet[1] - Ord(SP)) AND $0F) SHL 4) +
(((Kwartet[2] - Ord(SP)) AND $3C) SHR 2);
Triplet[2] := (((Kwartet[2] - Ord(SP)) AND $03) SHL 6) +
((Kwartet[3] - Ord(SP)) AND $3F)
end {Kwartet2Triplet};
Заметим, что в новой версии этих процедур используется глобальная переменная XXCode логического типа для определения типа кодирования.
1.1.3. Base64
Алгоритм кодирования Base64 отличается от алгоритмов UUencode и XXencode тем, что в нем не используется первый символ как индикатор длины. Общее то что используется алгоритм преобразования триплетов в квартеты с помощью 64 байтной таблицы преобразования.
Набор символов Base64 0 A 8 I 16 Q 24 Y 32 g 40 o 48 w 56 4 1 B 9 J 17 R 25 Z 33 h 41 p 49 x 57 5 2 C 10 K 18 S 26 a 34 I 42 q 50 y 58 6 3 D 11 L 19 T 27 b 35 j 43 r 51 z 59 7 4 E 12 M 20 U 28 c 36 k 44 s 52 0 60 8 5 F 13 N 21 V 29 d 37 l 45 t 53 1 61 9 6 G 14 O 22 W 30 e 38 m 46 u 54 2 62 + 7 H 15 P 23 X 31 f 39 n 47 v 55 3 63 /Подобно набору символов XXencode, набор символов Base64 не является подмножеством набора символов ASCII.
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!
Похожие книги на "Интернет решения от доктора Боба"
Книги похожие на "Интернет решения от доктора Боба" читать онлайн или скачать бесплатно полные версии.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Отзывы о "Bob Swart - Интернет решения от доктора Боба"
Отзывы читателей о книге "Интернет решения от доктора Боба", комментарии и мнения людей о произведении.