У меня есть веб-форма, для содержимого которой я хотел бы создать краткое представление в Base64. Форма, помимо прочего, содержит список из 264 двоичных значений, большая часть которых будет равна 0 в любой момент времени. (Они представляют регионы на географической карте). Даже в Base64 это 264-битное число генерирует длинную пугающую строку. Я хочу реализовать кодирование длин серий максимально эффективно. ты можешь помочь мне с этим? Я гуглил бинарный RLE, но не нашел ничего полезного.
Что я пробовал до сих пор - запуск RLE для двоичной строки с использованием десятичных счетчиков и «A» в качестве разделителя, обозначающего изменение между 0 и 1, а затем преобразование результата из базы 11 в базу 64. Например:
00000000001111111000000010000000000000000000000001111111110001111010101000000000000000000000000000000000000111111111110111000000000000111111100000001000000000000000000000000111111111000111101010100000000000000000000000000000000000011111111111011100
становится
10A5A5AA22A7A1A2AAAAAAA34A9AA1A10A5A5AA22A7A1A2AAAAAAA34A9AA1A
который в свою очередь становится
CNnbr/FxkgbbOw0LNAKgk65P8SdvaTG+t74o
или, в базе 62,
6imo7zq1pqr2mqglTHzXwJRAksm7fvHZHWQK
Это лучше, но я все еще не могу не сомневаться в том, что я делаю что-то не так - использование цифры «А» в качестве разделителя - лучший способ сделать это?
И еще одно обновление:
Благодаря @ comingstorm я сократил сжатую строку еще немного.
ILHHASCAASBYwwccDASYgAEgWDI=
Как я упоминал в комментариях, реальные случаи использования обычно приводят к еще более короткой строке.