Ошибка контрольной суммы UUencode - PullRequest
1 голос
/ 22 июня 2011

У меня есть поток данных, который я пытаюсь кодировать с помощью UUencode, чтобы передать данные на внешний чип. Чип принимает сразу 512 байт необработанных данных. Я кодирую 512 байт с помощью UUencode.

Насколько я понимаю, данные должны быть преобразованы в 11 строк по 45 байтов (что будет 60 байтов после кодирования) и 1 оставшуюся строку из 17 байтов.

Очевидно, что 17-байтовые косяки не отображаются напрямую в сегменты с кодировкой uuenco, поскольку они не кратны 3, но когда я получаю данные с кодировкой uuencoded, последняя строка возвращает 24 кодированных байта (или 18 необработанных байтов).

Это означает, что теперь у меня есть 513 байтов данных. Мой вопрос заключается в том, является ли это ошибкой в ​​моем алгоритме uuencode (хотя с чисто математической точки зрения я не понимаю, как это может быть) или, альтернативно, откуда берется дополнительный байт и как мне снова от него избавиться?

1 Ответ

7 голосов
/ 22 июня 2011

UUEncoding 512 байтов даст вам 684 закодированных байтов (не 513). Входной поток данных длиной 384 байта будет кодироваться точно в 512 байтов.

UUEncoding - это просто средство для преобразования 3-х байтового сегмента входных данных в 4-байтовый сегмент выходных данных. Любой входной сегмент длиной не 3 байта дополняется нулевыми байтами до тех пор, пока это не произойдет. Алгоритм UUEncoding не имеет представления для исходной длины данных.

Сравните это с UUEncoded файлами, которые форматируют и добавляют информацию в поток данных, разбивая поток на строки определенной длины и добавляя индикатор длины строки в начало каждой кодированной строки данных. В вашем примере ваши 17 последних байтов будут закодированы в 24 байта, но этой строке данных будет предшествовать байт, который дает длину строки как 17 вместо 18.

Единственный способ избавиться от отступов - это узнать их в первую очередь путем кодирования длины данных.

...