В настоящее время я работаю над алгоритмом для кодирования нормальной строки с каждым возможным символом в строку Base36.Encode String to Base36
Я пробовал следующее, но он не работает.
public static String encode(String str) {
return new BigInteger(str, 16).toString(36);
}
Я думаю, это потому, что строка - это не только шестнадцатеричная строка. Если я использую строку «Hello22334!» В Base36, я получаю NumberFormatException
.
Мой подход заключается в преобразовании каждого символа в число. Преобразуйте числа в шестнадцатеричное представление, а затем преобразуйте hexstring в Base36.
Является ли мой подход в порядке или есть более простой или лучший способ?
Я не понимаю, как «каждый возможный характер» и использование «BigInteger» с базой 16 должно сочетаться. Вероятно, вы захотите сначала преобразовать строку в байты и преобразовать ее. Просто имейте в виду, что представление байта строки зависит от используемой кодировки и что, если вы не предоставите кодировку, будет использоваться системный по умолчанию (и это может измениться при работе в другой системе). – Thomas
Я просто попробовал, и он не работает. Проблема в том, что я не знаю возможного решения. –
Вы могли бы взглянуть на то, как «java.util.Base64» реализован и адаптируется к базе 36. – Thomas