Как Base 64 обрабатывает двоичные данные с нулями в конце - PullRequest
1 голос
/ 29 октября 2008

Как я понимаю в спецификации, кодировщик Base64

a) берет исходный двоичный файл и дополняет его нулями, кратными 24 байтам.

b) затем он перекодирует его по шесть битов за раз в целевой набор из 64 символов (A..Z, a..z, 0..9, +, -). Если он обнаружит, что последние два байта (16 бит) заполнены нулями, последние два символа транскодируются как '=='. Если он обнаруживает, что последний байт (8 бит) был дополнен нулями, последний символ транскодируется как '='.

Мой вопрос, на этапе (b), как он узнает, что последние байты являются нулями, потому что они заполнены, а не нулями, потому что они являются частью действительных двоичных данных источника?

Является ли подсистема, отвечающая за часть (b), должна знать, что произошло во время части (а)

1 Ответ

3 голосов
/ 29 октября 2008

Кодер (в отличие от декодера) будет знать длину входных данных и сможет выяснить, ничего не выводить, "=" или "==" в конце. Ваш вопрос предполагает, что нет никакой связи между двумя упомянутыми вами этапами, но это неверно в реализациях, которые я видел.

Реализация, которую я должен был записать , вообще не делала первого этапа, так как в нем были процедуры для извлечения 6-битных групп из входного потока по одному, увеличивая byteCount каждый раз. Затем, в конце, выражение «byteCount%3» использовалось, чтобы решить, какую строку добавить в выходной поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...