Home

Page 40
Page 40
background image

можно использовать только 128 символов набора US-ASCII, при чем некоторые 
символы этого набора имеют специальное управляющий назначение и тоже не 
могут встречаться в произвольном месте письма. Рассмотренный выше метод (Q 
кодирование)   кодирует   один   произвольный   байт   с   помощью   3   допустимых 
символов   (это   не   экономично),   нельзя   ли   закодировать   произвольный   байт   с 
помощью   разрешенных   символов,   но   более   эффективно?   Выделим   из 
разрешенных   символов   набора  US-ASCII  64   допустимых   символа,   это   очень 
легко   сделать,   например,   разрешенными   символами   являются:   буквы 
английского алфавита (26+26), цифры (10), знаки «+» и «/». Очевидно, что с 
помощью   такого   набора   символов   (назовем   его   алфавитом  BASE64)   можно 
закодировать   произвольные   значения   байтов   достаточно   эффективно, 
действительно: 4 символа алфавита BASE64 принимают 64^4 (2^24) различных 
значений,   а   три   произвольных   байта   принимают   256^3   (2^24)   различных 
значений,   т.е.   с   помощью   ЧЕТЫРЕХ   символов   алфавита  BASE64   можно 
закодировать   ТРИ   байта!   Это   очень   легко   сделать:   достаточно   записать   три 
исходных байта побитово, разделить эти 24 бита на четыре 6 битовых части и 
закодировать   каждую   6-и   битовую   часть   символом   алфавита  BASE64.   Таким 
образом   с   помощью   данного   метода   кодирования,   можно   передавать   три 
произвольных   байта   с  помощью  четырех   допустимых   символов,   что,  конечно, 
экономичнее,   нежели   передавать   один   произвольный   байт   с   помощью   трех 
разрешенных символов.   Однако данный метод кодирования имеет следующий 
недостаток:   количество   передаваемых   байтов   совершенно   не   обязательно 
кратно  трем,  рассматриваем,   как  поступают   в   таком   случае.   Так  как   на   вход 
метода кодирования BASE64  поступают байты, то возможно три ситуации:

• Входная   последовательность   байтов   кратна   трем   байтам,   последняя 

кодируемая группа символов имеет длину три байта. В таком случае она 
кодируется   четырьмя   символами   алфавита

 BASE64   и   никаких 

дополнительных действий предпринимать не нужно. 

• Входная   последовательность   байтов   НЕ   кратна   трем   байтам,   последняя 

кодируемая   группа   символов   имеет   длину   1   байт,   т.е.   8   бит,   а   как   мы 
знаем,   метод   кодирования  BASE64   может   кодировать   только   6-битовые 
группы.   Первая   6-битовая   группа   кодируется   в   таком   случае   символом 
алфавита BASE64, вторая 6-битовая группа дополняется справа нулями до 
шести   бит   (добавляется   4   нуля),   данная   группа   кодируется   символом 
алфавита  BASE64,   после   чего   два   полученных   результирующих   символа 
алфавита BASE64 дополняются двумя знаками «=» (==)

• Входная   последовательность   байтов   НЕ   кратна   трем   байтам,   последняя 

кодируемая группа символов имеет длину 2 байта, т.е. 16 бит. Первая и 
вторая 6-битовые группы кодируется в таком случае символами алфавита 
BASE64, третья 6-битовая группа дополняется справа нулями до шести бит 
(добавляется   2   нуля),   данная   группа   кодируется   символом   алфавита 
BASE64,   после   чего   три   полученных   результирующих   символа   алфавита 
BASE64 дополняются знаком «=»
Подчеркнем, что количество символов, передаваемых с помощью метода 

BASE64 ВСЕГДА кратно четырем, а по количеству знаков «=» в конце всегда 
можно   судить   о   том,   сколько   нулей   было   добавлено   к   исходному   набору 
символов и произвести правильное декодирование. 

Очевидно,   при   больших   объемах   обрабатываемой   информации 

избыточность метода кодирования BASE64 невелика и составляет 33 % (вместо 
3 байт в линию связи отправляется 4, сравним с избыточностью предыдущего 
метода кодирования, когда вместо одного байта в линию связи отправляется 3 
символа, а вместо 3 байт – 9 байт), поэтому говорят о том, что данный метод 
эффективен   при   необходимости   передать   длинные   последовательности 


Copyright © 2022 Файлообменник files.d-lan.dp.ua

Использование любых материалов сайта возможно только с разрешения автора.