Это просто вопрос выполнения базового преобразования. Просто преобразуйте long в соответствующую числовую базу, соответствующую количеству символов в вашей строке, и используйте строку диапазона в качестве набора «цифр».
Например, предположим, что у вас есть строка "0123456789ABCDEF", то это означает, что вы должны преобразовать в шестнадцатеричное основание 16 Если строка "01234567", то вы преобразуете в восьмеричное основание 8.
result = "";
while (number > 0)
{
result = range[(number % range.length)] + result;
number = number / 16; //integer division, decimals discarded
}
Чтобы вернуться назад, возьмите первый символ, найдите его положение в строке и добавьте его к результату. Затем для каждого последующего символа умножьте текущий результат на основание, прежде чем добавлять позицию следующего символа.
result = 0;
for (int i = 0; i < input.length; i++)
{
result = result * range.length;
result = range.indexOf(input[i])
}