Кодирование ulong-значения в string-строку с заданным символьным словарём и обратное декодирование - C#
Формулировка задачи:
Мне необходимо осуществить кодирование ulong-значения в string-строку с заданным символьным словарём и обратное декодирование.
С кодированием ulong-значения в string-строку с заданным символьным словарём я разобралась. Соответствующий код выглядит так.public static string ConvertULongToBaseDictionary(ulong number)
{
var validCharacters = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!@#$%";
char[] charArray = validCharacters.ToCharArray();
var buffer = new StringBuilder();
var quotient = number;
ulong remainder;
while (quotient != 0)
{
remainder = quotient % (ulong)charArray.LongLength;
quotient = quotient / (ulong)charArray.LongLength;
buffer.Insert(0, charArray[remainder].ToString());
}
return buffer.ToString();
}Помогите, пожалуйста, реализовать алгоритм обратного декодирования полученной string-строки с заданным символьным словарём в ulong-значение.
Таким образом, мне нужно в конце концов проверить совпадает ли полученное ulong-значение после декодирования с исходным значением, принятым в качестве исходного при кодировании. Заранее благодарю за помощь.
Можно воспользоваться значением ulong.MaxValue при осуществлении проверки правильности кодирования/декодирования в качестве тестового значения.
Решение задачи: «Кодирование ulong-значения в string-строку с заданным символьным словарём и обратное декодирование»
textual
Листинг программы
const string chars = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!@#$%";
public static string ConvertULongToBase(ulong number)
{
var buffer = new StringBuilder();
var quotient = number;
ulong remainder;
while (quotient != 0)
{
remainder = quotient % (ulong)chars.Length;
quotient = quotient / (ulong)chars.Length;
buffer.Insert(0, chars[(int)remainder]);
}
return buffer.ToString();
}
public static ulong ConvertBaseToULong(string str)
{
var mult = 1ul;
var res = 0ul;
for (int i = str.Length - 1; i >= 0; i--)
{
res += (ulong)chars.IndexOf(str[i]) * mult;
mult *= (ulong)chars.Length;
}
return res;
}