У меня есть 32 байта двоичных данных, которые я хочу кодировать. Он будет помещен в URL-адрес, поэтому предпочтительный URL-адрес предпочтительнее. Очевидно, что типичная кодировка выбора - это hex. В результате получается строка из 64 символов.Самая короткая кодировка для 32 байтов данных
Я провожу много времени, смотря на различных кодировках, и был интересно, после неудачной попытки найти, если есть некоторые кодировки, которые могут производить вывод менее 64 символов, но без дополнения (только для чистоты URL, Я бы предпочел не иметь отступы). Правильный вариант будет чем-то вроде версии Base 64, которая автоматически определяет, когда декодирование возвращается к двоичному, необходимо ли заполнение.
Похоже, что Base 64 должен быть в состоянии определить, какое количество заполняемых элементов было без символов «=», поскольку вы можете добавить произвольное число символов «=» в конец строки базы 64 и он всегда будет успешно декодироваться (по крайней мере, используя Python's base64.b64decode()
). Я мог бы вручную разбить и снова добавить прописку в кодированные строки с базой 64, но для моего варианта использования это будет много дополнительных манипуляций с строкой.
Если вы действительно обеспокоены производительности (не преждевременно оптимизировать) самое лучшее решение, вероятно, чтобы написать свой собственный кодировщик Base64, что оставляет от отступы, и написать декодер, который использует таблицу поиска (это на самом деле не так сложно). По собственному опыту большинство кодировщиков/декодеров, которые включены в языки или библиотеки кодирования, не оптимизированы для скорости (я не могу говорить напрямую с python, хотя). – Syon
@Syon это очень поздняя оптимизация этапа. Мы публикуем внутренний API, который используется несколькими платформами в течение года, для общественности. Написание нашего собственного кодировщика/декодера Base 64 определенно является опцией. Может даже записать его в C и скомпилировать его как Python lib. – Endophage