не так ли?

ал в Интернете, чтобы узнать, как рассчитывается basE91. Я нашел такие ресурсы, какэтот который определяет символы, используемые для определенного значения, но я нигде не нашел, как я получаю это значение.

Я попытался изменить входные значения в двоичную и взять куски 6 и 7 бит, но они не работают, и я получаю неправильный вывод. Я не хочу код, который будет делать это для меня, как я, который должен написать это сам, я только хочу знать процесс, необходимый для кодирования строки в basE91.

 geza28 окт. 2017 г., 16:56
@JimMischel: и если вы на самом деле сравните алгоритм в pdf с исходным кодом, вы обнаружите, что они не совпадают, исходный код следует немного более сложному алгоритму.
 mwfearnley18 окт. 2018 г., 01:13
Спасибо за размещение этого вопроса. Ответ ниже дает более полезный обзор, чем ссылки в комментарии @ JimMischel.
 Jim Mischel27 окт. 2017 г., 17:39
Вы скачали его исходный код, чтобы посмотреть, как он выполняет вычисления? Хорошее понимание базовых кодировок преобразования, таких как base64, поможет.iiis.org/CDs2010/CD2010SCI/CCCT_2010/PapersPdf/TB100QM.pdf имеет довольно хорошее описание алгоритма. Легко понятная реализация C # доступна наbase91csharp.codeplex.com/SourceControl/latest#Base91.cs, Это действительно классное изобретение, называемое «поисковая система», которое позволяет вам быстро находить разные вещи. Я думаю, что мне потребовалось три минуты, чтобы найти выше. Подумайте о том, чтобы провести собственное исследование в следующий раз.

Ответы на вопрос(1)

Решение Вопроса

Затем прочитайте 13 битов из потока и сформируйте из него целочисленное значение. Если значение этого целого числа меньше или равно 88, считайте один дополнительный бит и вставьте его в 14-й бит (младший бит 1-й) целого числа. Это целое число (давайте назовем этоv) максимальное значение: 8192 + 88 = 8280.

Затем разделитьv на два показателя:i0 = v%91, i1 = v/91, Затем используйте таблицу символов из 91 элемента и выведите два символа:table[i0], table[i1].

(теперь вы можете увидеть причину 88: для максимального значения (8280) обаi0 а такжеi1 стать 90)

Таким образом, этот процесс сложнее, чем base64, но более компактен. Кроме того, в отличие от base64, размер вывода немного зависит от входных байтов. Последовательность N-длины 0x00 будет короче последовательности N-длины 0xff (где N - достаточно большое число).

 polemon27 апр. 2018 г., 15:24
неb->queue |= *ib++ << b->nbits обратный порядок битов в области видимости? или это намеренно для кодирования с прямым порядком байтов? Последовательность битового потока0xaa 0xbb приведет кb->queue из0xbb 0xaaне так ли?
 geza30 окт. 2017 г., 18:33
@ milo.farrell: да. Это зависит от того, как вы называете младший бит :) Обычно я использую 0 для младшего бита. Я уточнил это в своем ответе.
 milo.farrell30 окт. 2017 г., 18:11
Я предполагаю, что вы имеете в виду добавление дополнительного бита как 14-го бита, а не 13-го бита, так как в противном случае вы не получите 8280, у вас точно такое же количество представленных значений. Кроме того, что вы полностью решили мою проблему, это была часть головоломки, которую я не смог найти. Большое спасибо.

Ваш ответ на вопрос