Номера Java с символом radix>.MAX RADIX
у меня есть пять символов, и я хочу использовать эти пять символов в кодировке ASCII (печатные) количество. Самый простой способ достичь этого-использовать
Long.toString(number, Character.MAX_RADIX);
это даст мне номера от "0"
to "zzzzz"
. К сожалению Long.toString(int, int)
поддерживает только строчные буквы, без заглавных букв. Это означает, что max radix является 36
и самое большое число, которое я могу кодировать, это 36^5 - 1 = 60 466 175
. Если бы я мог использовать оба lower и прописные буквы, я бы получил Макс радикс 62
и самый высокий encodable номером 62^5 - 1 = 916 132 831
.
помимо копирования Long
исходный код и расширение возможных цифр, есть ли какое-либо другое место, в которое я должен заглянуть, во-первых, где это уже реализовано?
2 ответов
вы не указываете, должны ли символы быть printable ASCII:
если они это сделают, то вы можете перейти к
95^5
. Существует 95 печатных символов ASCII из пространства (SP) в Тильду (~).если они не делают, то вы можете пойти в
128^5
==2^35
.
в любом случае, алгоритм выполнения преобразования прост и проще, чем расширение до Long.toString(...)
. (Вы предположительно, не нужно беспокоиться о знаках, ошибках диапазона или отверстиях в символе <->
значное отображение. Было бы проще закодировать это с нуля.)
однако, я не знаю ни одного существующей реализация расширенных чисел radix.
Если вы готовы выйти на два символа за пределы буквенно-цифрового, вы можете использовать в base64 кодировка.
используя Base64
С Кодек Apache Commons вы можете получить 1073741824 возможные значения, как это:
byte bytes[] = new byte[4];
bytes[0] = (byte) ((value >> 24) & 0xFF);
bytes[1] = (byte) ((value >> 16) & 0xFF);
bytes[2] = (byte) ((value >> 8) & 0xFF);
bytes[3] = (byte) (value & 0xFF);
String encoded = Base64.encodeBase64String(bytes).substring(1, 6);