j-snow
@j-snow
Java junior developer

Как конвертировать BASE62 в BINARY?

Привет всем!

В своём приложении я генерирую уникальные идентификаторы в виде Base62 длиной 20 символов, и сохраняю их в MySQL.

Примеры идентификаторов:

xQkmfxYVBLicFvaw2ECL
5JhHXRYSSI6lVnOxzgOX
... и тд

MySQL тратит 1 байт на каждый символ. Но ведь это base62, а значит мы используем лишь 62 значения в каждом байте из 256 возможных.

Вопрос:
Как конвертировать base62 в байты и сохранить их в виде BINARY ?

Цель - использовать весь диапазон значений в каждом байте (0-255).

PS: Желательно примеры кода на Java.
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
Большого выигрыша не получить. 62 и 256 - это соответственно 6 и 8 бит, т.е. экономия максимум 25%.
Как преобразовать, есть несколько вариантов:
1) преобразовать каждый символ в строке в бинарный код по 6 бит, дополнить общую результирующую строку до длины кратной 8, преобразовать 8ки бит в символы.
2) Составить таблицу по 4 символа base62, которым будет однозначно соответствовать 3 символа base256. Дополнять строку до длины кратной 4 символам, брать по 4 символа и из таблицы им будет соответствовать 3 символа base256
Это классическая задачка по информатике на изменение системы счисления с 8 на 16 или 8 в 2, например, без другой промежуточной.
Общее правило, которое я ещё в школе придумал для себя: если a,b - системы счисления и если a^N = b^M, то каждые N символов в системе a заменяется на M символов в системе b.
Например:
перевести 10101010101010101010101 из двоичной в 8ричную систему: [2^3 = 8^1]
(0)10 101 010 101 010 101 010 101 (_2) = 25252525 (_8)
перевести 102301023001230 из 4й в 8ричную систему: [4^3 = 8^2]
102 301 023 001 230 (_4) = 22 61 13 01 54 (_8)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы